如果我编译器(gcc 4.6.0),然后运行该代码:全局函数模板重载和const参数
#include <iostream>
template <typename T> void F(/* const */ T& value) {
std::cout << "T & " << value << std::endl;
}
template <typename T> void F(/* const */ T* value) {
std::cout << "T * " << value << std::endl;
F(*value);
}
int main(int argc, char* argv[]) {
float f = 123.456;
float* pf = &f;
F(pf);
return 0;
}
我得到以下输出:
T * 0x7fff7b2652c4
T & 123.456
如果我去掉const的关键字我得到以下输出:
T & 0x7fff3162c68c
我可以改变float* pf = &f;
到const float* pf = &f;
再次获得原始输出,这不是问题。
我想知道的是,为什么在使用const修饰符进行编译时,重载解析认为const T& value
比const T* value
更适合非const float*
?