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++对此有着不同的设定。为了程序的健壮性,最好还是在构造函数内初始化所有值。