【发布时间】:2017-02-10 07:35:15
【问题描述】:
我有一个名为 Test 的类,其中有一个名为 const int 的成员 a:
class Test {
public:
const int a;
};
然后我实例化一个名为 test 的 Test 对象:
Test test;
并得到一个合理的编译错误“错误:'class Test'中未初始化的常量成员”,但是当我这样做时发生了一些奇怪的事情:
Test test = Test();
没有编译错误,发生了什么? Test() 不会像Test test; 那样调用默认构造函数,然后调用默认复制构造函数吗?我使用的编译器是“gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4”,编译器配置为c++11模式。
【问题讨论】:
-
这只适用于最高 4.8.5 的 GCC (godbolt.org/g/nOUP4z vs godbolt.org/g/0ztSPK)
-
编译器为 gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
-
@NathanOliver,你的编译器是什么
-
@kfsone:很可能这不是缺陷,而是将 GCC 中的默认语言方言更改为更现代的版本。如果不是(即如果 GCC 6 之前的默认方言是 C++98),那么这些编译器实际上需要接受默认模式下的第二次初始化。它没有任何问题。
标签: c++ constructor constants