【发布时间】:2013-02-12 03:05:56
【问题描述】:
考虑以下代码:
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; }
};
虽然我知道调用每个以前的类的默认构造函数会初始化这些值,但是当没有指定任何内容时,我无法看到调用的是什么。
默认构造函数不是默认调用的——因此是它的句柄?
【问题讨论】:
-
cppreference 包含各种初始化的简短摘要:en.cppreference.com/w/cpp/language#Initialization
标签: c++ constructor initialization default default-constructor