I have following template function:
template<typename T> void foo2(T t) {}
我知道不能使用以下方式调用它:
foo2({1,2,3});
因为初始化列表是模板参数的一个非推导上下文。我必须使用:
foo2<std::initializer_list<int>>({1,2,3});
但我也可以使用:
foo2(std::initializer_list<int>({1,2,3}));
让我想知道"{1,2,3}"和"std::initializer_list<int>({1,2,3})"有什么区别?
std::initializer_list<int>({1,2,3})
是类型为std::initializer_list<int>
的表达式。{1,2,3}
不是一个表达式。花括号只能出现在语言规范明确允许的上下文中,而不仅仅是在任何表达式可以出现的地方。 - M.M