假设我正在编写一个函数来打印字符串的长度:template <size_t N>void foo(const char (&s)[N]) { std::cout << "array, size=" << N-1 << std::endl;}foo("hello") // prints array, size=5现在,我想扩展foo以支持非数组:void foo(const char* s) { std::cout << "raw, size=" << strlen(s) << std::endl;}但是事实证明,这破坏了我最初的预期用法:foo("hello") // now prints raw, size=5为什么?不需要模板到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用?
3 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
*被调用的转换构造函数是用户定义的转换序列的一部分。用户定义的转换序列由用户定义的转换(ctor调用)加上初始标准覆盖序列(数组到指针)加上最终的标准转换序列(此处为Identity)组成。当然不是序列本身。
添加回答
举报
0/150
提交
取消