gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:22:16 27 4
gpt4 key购买 nike

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

我写了一个简单的程序检查了一下:

#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());
}

错误是

invalid initialization of non const reference from r value

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

调用 rec(ret()) 时会发生什么向我解释 rec() 如何发送它的参数。

最佳答案

你说,

as far as i know lvalue is the one which cannot be modified.

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

这个意思在今天仍然有效。

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

这个意思在今天仍然有效。

编辑

现在您将问题更改为:

as far as i know lvalue is the one which can be modified.

答案对您来说应该是显而易见的。当函数的参数类型是非常量引用时,只能将左值传递给此类函数,而不是右值

编辑 2

感谢@0x499602D2 的评论:

For user-defined classes you can use the assignment operator on rvalues as they are like member function calls: A{} = A{}; would compile given an accessible copy/move-assignment operator. I think the term lvalue designates an object that will exist beyond the expression in which it is used, and rvalue meaning the opposite.

关于c++ - 将 lvaue 传递给 C++ 中的非 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29129243/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com