gpt4 book ai didi

c++ - 措辞 : Is there a difference b/w rvalue and rvalue references?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:31 26 4
gpt4 key购买 nike

假设我有以下对象

class foo
{
foo() {..} //Constructor
foo(const foo& f) {..} //Copy Constructor - `f` is lvalue reference
foo(foo&& g) {...} //Move constructor
};

现在我知道在声明中

 foo(const foo& f) {..} 

f 是一个左值引用

现在我的问题是,在声明中

foo(foo&& g) {...}

我知道 g 是一个右值,但我在这里和那里听说过有人将 g 称为右值引用。我的问题是右值和右值引用之间有什么区别,或者它们可以互换使用吗?

最佳答案

它们是不同的。

在 C++11 中,值分为三类:左值、xvalue(“eXpiring”值)和 prvalues(“纯”右值)。 C++11 中的右值由 xvalues 和 prvalues 组成。

左值是标识非临时对象或非成员函数的表达式。值得注意的是,即使 x是右值引用,表达式 x是一个左值。本质上,如果它是有名称的东西,它就是一个左值。

一个 xvalue 是一个标识过期对象(可以从中移动)的表达式。这包括 std::move(x) 等内容因为它返回一个右值引用,或 static_cast<X&&>(x)

纯右值标识临时对象或不与任何对象关联的值;这与 C++11 之前的右值相同。

右值引用仅绑定(bind)到右值。因此,在

foo(foo&& f) {...}

f 是一个右值引用,它绑定(bind)到一个右值(xvalue 或 prvalue),但是表达式 f本身是一个左值。它有一个名字,你可以用 &f 来获取它的地址。 .右值引用的要点是对象 f绑定(bind)到是一个右值,因此可以安全地从中移动。

关于c++ - 措辞 : Is there a difference b/w rvalue and rvalue references?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599004/

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