假设我正在编写一个函数来打印字符串的长度:
template <size_t N>
void foo(const char (&s)[N]) {
std::cout << "array, size=" << N-1 << std::endl;
}
foo("hello") // prints array, size=5
Run Code Online (Sandbox Code Playgroud)
现在我想扩展foo以支持非数组:
void foo(const char* s) {
std::cout << "raw, size=" << strlen(s) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但事实证明,这破坏了我原来的预期用途:
foo("hello") // now prints raw, size=5
Run Code Online (Sandbox Code Playgroud)
为什么?这不需要数组到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用?