首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于“template”跟“引用”

2012-09-20 
关于“template”和“引用”我的代码如下:(平台是VS2005,系统XP)#include iostreamusing std::coutusing st

关于“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;} 

热点排行