常量左值/右值参考函数匹配

时间:2019-09-09 17:13:17

标签: c++ overloading const rvalue-reference

为什么在代码const左值和右值下面调用const T& t而不是T&& t

在C ++入门第五版(第16章)中,提到两个模板功能可行时,编译器应选择更专业的版本。

这是我的分析:

对于const int&& i = r * 3;右值

  • T&& tT已绑定到const int
  • const T&T已绑定到int

对于const int& j = 10;左值

  • T&& t:根据间接右值引用传递规则T绑定到const int &
  • const T&T已绑定到int

所以我正在考虑使用const lvalue / rvalue引用,采用rvalue引用的模板函数和采用lvalue引用的函数都是可行的。因此,应该选择右值引用,但事实并非如此。那么我的分析有什么问题呢?

template<typename T>
void debug(T&& t) {
    cout << " in T&& t " << endl;
}
template<typename T> void  func(const T& t) {
    cout << " in const T& t" << endl;
}

int r = 1;
debug(r); // print in T&& t; 
const int&& i = r * 3;
debug(i); //print in const T& t
const int& j = 10;
debug(j); //print in const T& t

0 个答案:

没有答案