我遇到下一个案例的问题:
template<typename T>
void test(const T &ref){
cout << "By reference";
}
template<typename T>
void test(const T *ptr){
cout << "By pointer";
}
我发送到test()
方法的任何参数都将始终通过引用传递给重载。即便如此:
int *p = 0; test(p);
有人能告诉我为什么参考具有如此高的优先级,并且标准中的位置可以在哪里阅读。
哦......我不专心!我必须为指针大小写指定const和非const重载:
template<typename T>
void test(const T &ref){
cout << "By reference";
}
template<typename T>
void test(T *ptr){
cout << "By pointer";
}
template<typename T>
void test(const T *ptr){
cout << "By const pointer";
}
答案 0 :(得分:0)
你能检查模板中使用的是哪种类型,是int还是int *?我怀疑你检查T是否为int,但编译器将T解释为int *并使用参考模板。
尝试使用
test<int>(p);
指定类型明确