gpt4 book ai didi

c++ - 右值与临时值

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:08:56 24 4
gpt4 key购买 nike

有人概括了“临时对象是右值”这一说法。我说“不”并给了他下面的例子

 double k=3;

double& foo()
{
return k;
}

int main()
{

foo()=3; //foo() creates a temporary which is an lvalue
}

我的解释正确吗?

最佳答案

临时值和右值是不同(但相关)的概念。临时性是对象 的一个属性。非临时对象的示例包括本地对象、全局对象和动态创建的对象。

作为右值是表达式 的一个属性。右值的对立面是左值,例如名称或取消引用的指针。 “临时对象是右值”这一说法毫无意义。这是右值和临时对象之间的关系:

An rvalue is an expression whose evaluation creates a temporary object which is destroyed at the end of the full-expression that lexically contains the rvalue.

请注意,左值也可以表示临时对象!

void blah(const std::string& s);

blah(std::string("test"));

在函数 blah 中,左值 s 表示通过计算表达式 std::string("test") 创建的临时对象。

您的评论“引用是左值”也毫无意义。引用不是表达式,因此不能是左值。你真正的意思是:

The expression function() is an lvalue if the function returns a reference.

关于c++ - 右值与临时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3213591/

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