可能重复:
uninitialized const
我知道const对象需要初始化。
所以对于以下代码,
class sample
{};
int main()
{
const sample obj;
return 0;
}
编译器会抱怨因为const对象obj
未初始化。
但是当我使用默认构造函数修改代码(如下所示)时,编译器不会抛出任何错误。
class sample
{
public:
sample() { }
};
int main()
{
const sample obj;
return 0;
}
新添加的默认ctor能满足编译器的是什么?
答案 0 :(得分:4)
新添加的默认ctor能满足编译器的是什么?
因为这是C ++标准在用const
qualifer声明对象时强加的要求。
<强>参考:强>
C ++ 03 8.5初始化程序8声明者
§9:
如果没有为对象指定初始化程序,并且该对象是(可能是cv限定的)非POD类类型(或其数组),则该对象应默认初始化; 如果对象是const限定类型,则底层类类型应具有用户声明的默认构造函数。否则,如果没有为非静态对象指定初始化程序,则该对象及其子对象(如果有) ,具有不确定的初始值90);如果对象或其任何子对象是const限定类型,则程序格式不正确。
答案 1 :(得分:1)
您正在进行const限定类型的默认初始化。 C ++(C ++ 11 draft n3290)标准对此有这样的说法(§8.5/ 6 Initializers):
如果程序要求对const限定类型T的对象进行默认初始化,则T应为具有用户提供的默认构造函数的类类型。
您的第一个示例不符合此要求(没有用户提供的构造函数)。第二个。