【发布时间】:2015-12-18 14:11:59
【问题描述】:
我对下一个案例有疑问:
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";
}
【问题讨论】:
-
旁注:删除模板并将
T替换为int后,g++ 4.8.4 选择了指针重载
标签: c++ pointers reference overloading operator-precedence