将lvaue传递给c ++中的非const引用

时间:2015-03-18 17:51:43

标签: c++ pass-by-reference

我在加速c ++中读到我们应该将lvalue传递给非const引用。这是为什么?据我所知,左值是可以修改的值。请告诉我它是否有另一个定义。

我通过编写一个简单的程序来检查它:

#include<iostream>
#include<vector>
using namespace std;
vector<double> ret()
{
    vector<double> d;
    return d;
}
void rec(vector<double> &g)
{
    cout<<"entered..."<<endl;
}
int main
{
    rec(ret());
}

错误是

  

从r值

初始化非const引用无效

rvaluelvalue有什么意义? dret()中的局部变量,它按值传递,因此不存在悬空问题。

调用rec(ret())时会发生什么 向我解释rec()如何发送其论点。

1 个答案:

答案 0 :(得分:1)

你说,

  

据我所知左值是无法修改的值。

这是不正确的。传统上,左值代表一个值,它可以出现在赋值运算符的左侧,这意味着它们必须是可修改的。

这个意思今天仍然有效。

也许你会对 rvalue 感到困惑,它代表了一个可以出现在赋值运算符右边的值,它可能是可修改的,也可能是不可修改的。

这个意思今天仍然有效。

修改

现在您已将问题更改为:

  

据我所知左值是可以修改的值。

答案应该是显而易见的。当函数的参数类型是非const引用时,只有 lvalue 可以传递给这些函数,而不是 rvalue

编辑2

感谢@ 0x499602D2的评论:

  

对于用户定义的类,您可以在 rvalue 上使用赋值运算符,因为它们就像成员函数调用一样:A{} = A{};将在给定可访问的复制/移动赋值运算符的情况下编译。我认为术语 lvalue 指定的对象将存在于使用它的表达式之外, rvalue 意味着相反。