问题:
为什么带有类型参数的函数const char* 优先于具有 const char 类型参数的函数模板(&s)[N] 当两者同等适用时?
根本原因:
歧义源于相对的转化成本。重载解析有利于需要较少转换操作的函数。数组实际上是指向其第一个元素的指针,这意味着数组到指针的转换成本低于声明基于数组的函数模板。
标准解释:
根据C标准([over.match.best]/(1.3), (1.6)):
在这种情况下:
可能解决方法:
要优先考虑基于模板的函数,请将第二个重载也定义为函数模板:
template <typename T> auto foo(T s) -> std::enable_if_t<std::is_convertible<T, char const*>{}> { std::cout << "raw, size=" << std::strlen(s) << std::endl; }
此部分排序可确保基于模板的函数是适用时选择。
以上是为什么 `const char*` 函数重载优于 `const char (&)[N]` 模板函数?的详细内容。更多信息请关注PHP中文网其他相关文章!