相关疑难解决方法(0)

为什么指针衰减优先于推导出的模板?

假设我正在编写一个函数来打印字符串的长度:

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)

为什么?这不需要数组到指针的转换,而模板是完全匹配的吗?有没有办法确保我的数组函数被调用?

c++ arrays overload-resolution

51
推荐指数
1
解决办法
1446
查看次数

标签 统计

arrays ×1

c++ ×1

overload-resolution ×1