【发布时间】:2018-12-11 19:27:51
【问题描述】:
我正在尝试理解 C++ 中的左值和右值。
所以我将它们用作传递给函数的参数。 在第一种情况下,我有两个函数,第一个有一个对 const int 的引用,在这种情况下,多亏了“const”(参见link),我可以将左值和右值都传递给第一个函数,我将拥有没问题。 在第二个函数中,我必须传递一个 Rvlaue 否则我会得到描述的错误。
void f1(const int& n){cout<<"[Lvalue]"<<endl;}
void f2(int&& n){cout<<"[Rvalue]"<<endl;}
int main()
{
const int n = 10;
f1(n);
f2(n); //error: cannot bind rvalue reference of type ‘int&&’ to lvalue of type ‘const int’
}
好的!
为什么如果第二个函数变成函数模板,如下例我也可以传递一个左值。
void f1(const int& n){cout<<"[Lvalue]"<<endl;}
template<class T>
void f2(T&& n){cout<<"[Rvalue]"<<endl;}
int main()
{
const int n = 10;
f1(n);
f2(n); //ok
}
【问题讨论】:
-
右值引用与转发引用 (
f2(T&&))。 -
Jarod 的意思是,在模板参数推导的上下文中,
T&&可以绑定到很多不一定是右值引用的东西! -
"我正在尝试理解左值和右值"我在这里没有看到任何右值。
标签: c++ rvalue-reference template-argument-deduction const-reference reference-binding