class A {
public:
A():aa(42) {
std::cout <<"My aaa=> uninitialize:" aaa << std::endl;
aaa = aa;
std::cout <<"My aaa=> " aaa << std::endl;
}
private:
long long aa;
long long aaa;
char
};
分別編譯這段代碼結果如下:
g++ | clang++ | |
---|---|---|
long long | aaa => 0 | aaa => 948888123213 |
char | 0 | 0 |
char* | 0 | 0x3228f100 |
由此可見,c++關於class member的初始化之前的動作視編譯器而定。
可以推測,g++通常會把數值類型和指針置位0,clang++對此有着不同的設定。為了程序的健壯性,最好還是在構造函數內初始化所有值。