读书人

关于“template”跟“引用”

发布时间: 2012-09-20 09:36:50 作者: rapoo

关于“template”和“引用”
我的代码如下:(平台是VS2005,系统XP)
#include <iostream>
using std::cout;
using std::endl;


double _min( double& a, double& b ) {
cout << "call " << "double min" << endl;
return a < b ? a : b;
}

template <typename T>
T _min( const T& a, const T& b ) {
cout << "call " << "template min" << endl;
return a < b ? a : b;
}

int main() {
double dc = _min( 1.4, 2.4 );
cout << "The result is " << dc << endl;
}

编译通过,结果如下:

call template min
The result is 1.4

这里调用的是 template _min();

后来吧double _min( double& a, double& b ) 改作 double _min( double a, double b )
编译通过,结果如下:

call double min
The result is 1.4

我又把 template _min 的整个函数注释掉,把double _min() 的传值参数 改为 原来的 传引用参数
编译未通过。

颇有不解。

[解决办法]
整型常量属于 rvalue,不能绑定到 non-const lvalue reference 上,所以编译错误。
double _min( double const& a, double const& b );
double _min( double a, double b );
都行,就是 double& 不行。

[解决办法]

C/C++ code
#include <iostream>using std::cout;using std::endl;//这种情况无论是传值的时候是传变量都    double _min( double& a, double& b ) {    cout << "call " << "double min" << endl;    return a < b ? a : b;}/*//这种情况无论是传值的时候是传常量还是变量都OKdouble _min( double a, double b ) {    cout << "call " << "double min" << endl;    return a < b ? a : b;}*///只有在没有更匹配的非模板函数的时候,才会调用template <typename T>T _min( const T& a, const T& b ) {    cout << "call " << "template min" << endl;    return a < b ? a : b;}int main() {    double a = 1.4;    double b = 2.4;    double dc = _min( 1.4, 2.4 );    //double dc = _min( a, b);    cout << "The result is " << dc << endl;} 

读书人网 >C++

热点推荐