以下是Effective Modern C++(第55页)的引用:
"假设你使用一组空的大括号来构造一个支持默认构造函数的对象,并且还支持std :: initializer_list构造.你的空括号是什么意思?等规则是你得到默认构造."
我用std :: array尝试过这个:
std::array<int, 10> arr{};
Run Code Online (Sandbox Code Playgroud)
并得到了g ++(版本4.8.2)的警告:
警告:缺少成员'std :: array <int,10ul> :: _ M_elems'的初始值设定项
这是在尝试std::array从空构造一个时得到的警告std::initializer_list(请参阅为什么我可以从{}初始化一个常规数组,而不是std :: array来讨论此警告).
那么,为什么上面的代码行不能解释为调用默认构造函数?