#include <vector>
int main()
{
auto v = std::vector{std::vector<int>{}};
return v.front().empty(); // error
}
见在线演示
然而,根据 Scott Meyers 的Effective Modern C++(强调原文):
但是,如果一个或多个构造函数声明一个类型为 的参数
std::initializer_list
,则使用大括号初始化语法的调用强烈倾向于采用 的重载std::initializer_lists
。强烈。如果编译器有任何方法可以将使用大括号初始化程序的调用解释为采用 a 的构造函数std::initializer_list
,编译器将采用该解释。
所以,我认为std::vector{std::vector<int>{}};
应该产生一个对象std::vector<std::vector<int>>
而不是std::vector<int>
.
谁错了?为什么?