我目前正在學習一門C++課程並試圖深入理解整個事情。 我想出了一些理論,這將是巨大的,如果有人能證實他們:變量初始化和構造函數
每個變量(本地,全局staic,會員和非會員)都保證有第一次使用
之前調用它的構造函數像int這樣的基本類的ctors基本上是no-ops,所以我們明確地賦值了一個值,沒有默認的零值。
以下類在語義上是相同的(並且應該產生相同代碼)
class A
{
int n;
};
和
class A
{
int n;
public:
A() : n() {}
};
和
class A
{
int n;
public:
A() { n = int(); }
};
變量n爲在所有情況下仍然未初始化。
編輯:
這似乎是我absolutetly低估了這個問題的複雜性,我大部分的假設是錯誤的。現在Iam仍然試圖找出對象初始化的基本規則。
我覺得這個說法很難相信。 class Bar {int n; }是一個POD,因爲它是隱式定義的,因此它是/平凡/(來自ISO的正式術語)。然而,它是存在的,並且'新酒吧'和'新酒吧()`稱它。在任何情況下Bar :: Bar()都不會初始化Bar :: n – MSalters 2009-06-11 10:04:31
「class B {int n;};」 *不是* POD,因爲它包含一個私有的非靜態成員'n'。但是,如果它被定義爲「class B {public:int n;};」那麼它將是一個POD,所以當您執行「新Bar()」時,'n'將被初始化。 – 2009-06-11 10:59:04
新手是否有可能完全理解這個主題?似乎有這麼多的規則和例外:-( – codymanix 2009-06-11 11:22:23