从C++ 11标准§8.5p6我们得到:
如果程序要求对const限定类型T的对象进行默认初始化,则T应为具有用户提供的默认构造函数的类类型.
下面的代码应该不会编译.但它确实在Coliru和Ideone都有.
class A{};
int main() {
const A a;
}
Run Code Online (Sandbox Code Playgroud)
编辑:
在尝试理解这里发生了什么时,我最终得到了以下代码,它编译(至少它符合标准,与A用户提供的构造函数一样).但后来出现了以下问题:哪个标准子句确保a.b.j用0初始化(参见Ideone中的代码),下面是什么?
#include <iostream>
struct B { int j; B(){ std::cout << "B()" << '\n'; } };
struct A
{
struct B b;
int i;
public:
A(): i(1) { std::cout << "A()" << '\n'; }
};
int main() {
const A a;
std::cout << a.b.j << '\n';
std::cout << a.i << '\n';
}
Run Code Online (Sandbox Code Playgroud)
EDIT1:
很抱歉上面的编辑,但我还没有使用Unix.上周, …