考虑以下代码:
class A {
public:
int a;
};
class B : public A {
public:
B() { std::cout << "B[" << a << "]" << std::endl; }
};
class C : public B {
public:
C() { std::cout << "C[" << a << "]" << std::endl; }
};
int main(int argc, char *argv[]) {
B();
std::cout << std::endl;
C();
}
及其输出——用 g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 编译的程序:
B[0]
B[-2097962768]
C[-2097962768]
我发现获得第二次调用的唯一方法C()
——初始化其值是向构造函数添加显式调用,例如:
class B : public A {
public:
B() : A() { std::cout << "B[" << a << "]" << std::endl; }
};
class C : public B {
public:
C() : B() { std::cout << "C[" << a << "]" << std::endl; }
};
尽管我知道调用每个以前的类的默认构造函数都会初始化这些值,但是当没有指定任何内容时,我无法看到正在调用的内容。
默认构造函数不是默认调用的 - 因此它的句柄?