在开始将其标记为重复之前,我已经读过this,但是我的问题是关于MSVS编译器的。链接的问题涉及g++编译器。
我在最后更新于2015年11月3日的MSVS 2015编译器上尝试了此程序here
class Test
{ };
int main()
{ const Test t; }
根据default initialization,上述程序应无法编译。它说:因此,在上述程序的情况下,需要进行诊断。但是MSVS没有给出任何适当的诊断。根据C++标准,MSVS在这里似乎不确定。 MSVS中的这个错误是否也和g++一样?
最佳答案
根据标准草案8.5 / p7.3初始化程序[dcl.init]:
因此,您是对的,一个const
限定对象必须具有用户提供的构造函数才能进行初始化。
这是由于事实,对const
限定的对象仅初始化一次,如果未提供默认构造函数,则该对象将包含未初始化的值。
但是,在您的示例中class Test
没有成员变量。严格来说,按照标准是不正确的,但是由于Test
没有成员变量,因此没有任何危害。
因此,委员会提交了缺陷报告DR 253。说的是:
GCC遵循DR就是这就是为什么要编译代码的原因,我猜测是出于同样的原因VC++也要编译代码。
但是,如果您尝试编译以下代码:
class Test{
int i;
};
int main() {
const Test t;
}
GCC将发出错误。 VC++ 2015将发出诊断信息: