小编fan*_*rin的帖子

接受 const char(&)[N] 的函数模板是否比接受 const T& 的函数模板更专业?

我定义了两个版本的函数模板,名为compare

\n
#include <cstring>\n\nusing namespace std;\n\n// fist version\ntemplate <size_t N, size_t M>\nint compare(const char (&a)[N], const char (&b)[M]) {\n    return strcmp(a, b);\n}\n\n// second version\ntemplate <typename T>\nint compare(const T &a, const T &b) {\n    if (a < b) return -1;\n    if (b < a) return 1;\n    return 0;\n}\n\nint main() {\n    const char *p1 = "dog", *p2 = "cat";\n    compare(p1, p2); // call second version\n    compare("dog", "cat"); // call second version?\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在使用c++11std的CPP Primer(第5版)一书中,作者说compare(p1, p2)将调用第二版模板,因为没有办法将指针转换为对数组的引用。将 …

c++ function-templates overload-resolution compiler-bug

7
推荐指数
1
解决办法
176
查看次数