考虑函数模板:
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
此函数需要一个带有 begin 的类型的参数() 和结束 ()
问题:
为什么下面的调用是非法的?
printme({'a', 'b', 'c'});
答案:
调用 printme({'a', 'b', 'c'}) 是非法的,因为无法推断模板参数 T。如果不显式指定模板参数,编译器无法确定参数的类型,因为它可以是具有 begin() 和 end() 函数的任何类型。在以下情况下不会出现此问题:
例外的是 auto 被推导为 std::initializer_list
以上是为什么 `printme({\'a\', \'b\', \'c\'});` 在 C 模板类型推导中非法?的详细内容。更多信息请关注PHP中文网其他相关文章!