【发布时间】:2016-02-05 00:20:31
【问题描述】:
当我编译以下代码的#if 0 和#if 1 版本时,如何解释差异:
#include <cstdlib>
struct A
{
explicit A() = default; // explicitly defaulted or deleted constructors are allowed for aggregates (since C++11)
#if 1
private :
#endif
int i;
};
int
main()
{
A a = {};
return EXIT_SUCCESS;
}
-
#if 0一切正常,编译成功。 - 对于
#if 1编译失败并出现错误消息:错误:选择的构造函数在复制初始化中是显式的
根据A 是否聚合,表达式A a = {}; 有什么区别?
【问题讨论】:
-
我想你自己回答了。当您收到错误 A 不是聚合结构时。所以你不能使用初始化列表来初始化它。
-
@Jonathan 我自己的理解(愚蠢的“它取决于聚合性”)不太清楚。我想听听确切的解释。
标签: c++ c++11 constructor c++14 default-constructor