用的编译器是 clang-700.1.81
#include <iostream>
using namespace std;
template <unsigned N, unsigned M>
void compare(const char p1[N], const char p2[M]) {
cout << N << ", " << M << endl;
}
int main() {
compare("hi", "hello");
return 0;
}
错误信息是:
test.cpp:9:3: error: no matching function for call to 'compare'
compare("hi", "hello");
^~~~~~~
test.cpp:5:6: note: candidate template ignored: couldn't infer template argument
'N'
void compare(char p1[N], char p2[M]) {
^
1 error generated.
请问这里为什么编译器推断不出 N 为 3, M 为 6 呢?
但是如果参数是用引用,那就可以了。
#include <iostream>
using namespace std;
template <unsigned N, unsigned M>
void compare(const char (&p1)[N], const char (&p2)[M]) {
cout << N << ", " << M << endl;
}
int main() {
compare("hi", "hello");
return 0;
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.