gpt4 book ai didi

c++ - C++ 中的右值引用和一个简单的例子

转载 作者:行者123 更新时间:2023-12-02 10:04:58 27 4
gpt4 key购买 nike

我试图了解究竟是什么Rvalue References是。
在我所见的任何地方,他们都有一些名为 Perfect forwarding 的示例这听起来太复杂了。

我只想要一个清晰的基本示例来说明右值引用是什么,看看它们是否在完美转发等主题之外使用。

我读过了:

An lvalue is an expression that refers to a memory location and allows us to take the address of that memory location via the & operator. An rvalue is an expression that is not an lvalue



那么这样说是否正确:
An Rvalue Reference is a Reference to something that is not in the memory? Maybe it's in a register?

例如:
#include <iostream>

int main()
{
int&& a = 50;
int b = 60;

return 0;
}
50技术上尚未在内存中,但 a是引用吗?是 b任何不同于 a ?

还能在哪里使用(这很容易解释)?

最佳答案

首先,标准没有定义某些东西是否驻留在内存或寄存器中。你不需要考虑它。对您而言,所有对象都像在内存中一样工作。下as-if rule ,您的编译器可以将其中一些放入寄存器中,只要它不影响您的程序的工作方式。
是的,您可以获得左值(位域除外)而不是右值的地址,但这是一种语言设计选择而不是技术限制(大多数情况下它没有意义,因此不允许这样做)。 Value categories (左值与右值)与事物在内存中的存储方式无关。

Im trying to understand what exactly Rvalue References are


右值引用类似于左值引用。主要区别在于您可以使用什么来初始化它们。右值引用必须用右值初始化,左值引用必须用左值初始化(作为异常(exception), const 左值引用可以绑定(bind)到右值)。 int&& a = 50;之所以有效,是因为 50int和一个临时对象。 (通常“临时对象”是“右值”的同义词,但 not always。)
这种情况有点棘手,因为通常在 full-expression 结尾处销毁的临时对象(粗略地说,当它们创建的代码行完成执行时)。但是在这里, 50 的生命周期是 extended因为它绑定(bind)到一个引用。

is b any different than a?

int&& a = 50;  
int b = 60;

因为生命周期延长 - 不,它们是等价的。也许它们之间有一些模糊的区别,但我想不出任何区别。

关于c++ - C++ 中的右值引用和一个简单的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60659126/

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