首頁>Club>
16
回覆列表
  • 1 # 使用者8372426509941

    C 語言沒有建構函式的概念。如同內建型別的變數,

    定義全域性或靜態的 struct 變數時,其成員會初始化為零;定義區域性的 struct 變數時,其成員為不確定值。

    C 語言可對 struct(以及 union 和陣列)變數使用初始化列表,如:

    C++ 在沒有建構函式、沒有繼承基類、沒有私有/保護的非成員變數等條件下(詳看 聚合初始化),也可以用初始化列表,與 C 相容;但 designator 語法在 C++20 才會有。

    在實踐上,雖然 C 語言沒有建構函式的概念,也不妨礙使用者自行定義函式作初始化,如:

    這種 struct 初始化方式的「優點」是,使用者可用多個不同名字的函式定義不同的初始化方式。而 C++ 建構函式必須和類同名,只能透過引數型別來區分,例如用 std::piecewise_construct 這些東西。

    缺點是,無法規避使用者不呼叫函式,而 C++ 是可以自動呼叫預設建構函式,或故意產生編譯錯誤,令使用者知道忘記了寫初始化引數,從而避免了一些 bug。相似地,C++ 也有解構函式,兩者造就 C++ 的一大特徵 RAII(Resource Acquisition Is Initialization)。

  • 中秋節和大豐收的關聯?
  • 鬥羅主天使副骨劍怎麼玩?