【发布时间】:2012-09-08 00:43:52
【问题描述】:
考虑函数:
template<typename T>
void printme(T&& t) {
for (auto i : t)
std::cout << i;
}
或任何其他需要一个带有 begin()/end() 参数的函数 - 启用类型。
为什么以下是非法的?
printme({'a', 'b', 'c'});
当所有这些都合法时:
printme(std::vector<char>({'a', 'b', 'c'}));
printme(std::string("abc"));
printme(std::array<char, 3> {'a', 'b', 'c'});
我们甚至可以这样写:
const auto il = {'a', 'b', 'c'};
printme(il);
或
printme<std::initializer_list<char>>({'a', 'b', 'c'});
【问题讨论】:
标签: c++ templates c++11 initializer-list