所以我正在努力理解 C++ 中的初始化规则。
我写了以下代码:
struct B {
int i;
// this prevents the definition of an implicit default constructor
B( int j ) : i(j) {}
};
struct C {
int i;
// i is not mentioned in the initializer list
// the compiler will call default constructor for i
C() {}
};
int main() {
int x( 1 );
cout << " x = " << x << endl;
// error: no matching function for call to ‘B::B()’
//B b4 = B();
//cout << " b4.i = " << b4.i << endl;
C c1;
cout << " c1.i = " << c1.i << endl;
}
1) x 已正确初始化为 1,但我不理解符号“int x(1)”。它不是值初始化的(我们会写“int x = int()”,然后 x 将为 0)。它也不是构造函数调用,因为内置类型没有构造函数。此外,以下页面明确指出:“只有具有构造函数的类的对象才能使用函数式语法进行初始化”。
http://msdn.microsoft.com/en-us/library/w7wd1177(v=vs.100).aspx
2) 如果我取消注释 b4 的创建,它将无法编译。因为我定义了一个构造函数,所以编译器不会生成一个隐式的默认构造函数。这可以。但是为什么这会阻止使用“B()”创建一个临时的值初始化对象呢?写“B()”绝不是构造函数调用,是吗?
3) 正如 C 类的注释中所解释的,初始化列表中没有提到 i。因此,它应该是默认初始化的,这意味着对于 int 类型未定义。但是每次我运行程序时输出都是“c1.i = 0”。
谢谢。