C ++运算符查找误解

时间:2015-12-18 14:11:59

标签: c++ pointers reference overloading operator-precedence

我遇到下一个案例的问题:

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";
}

1 个答案:

答案 0 :(得分:0)

你能检查模板中使用的是哪种类型,是int还是int *?我怀疑你检查T是否为int,但编译器将T解释为int *并使用参考模板。

尝试使用

test<int>(p);

指定类型明确