gpt4 book ai didi

c++ - 右值如何取消引用?

转载 作者:行者123 更新时间:2023-12-01 14:50:48 25 4
gpt4 key购买 nike

The prefix operators return the object itself as an lvalue. The postfix operators return a copy of the object’s original value as an rvalue.



因此,在像 *a++这样的语句中,a会递增,并且a的原始值的副本将作为rvalue返回,但是从Lvalues和Rvalues的Microsoft c++语言引用中获得

An rvalue is a temporary value that does not persist beyond the expression that uses it



并举一个例子
// lvalues_and_rvalues1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main()
{
int x = 3 + 4;
cout << x << endl;
}

In this example, x is an lvalue because it persists beyond the expression that defines it. The expression 3 + 4 is an rvalue because it evaluates to a temporary value that does not persist beyond the expression that defines it.



我的问题:
1)从 *a++返回的右值是什么,以便可以取消引用?
2)我误解了什么概念吗?
提前致谢!

最佳答案

The prefix operators return the object itself as an lvalue. The postfix operators return a copy of the object’s original value as an rvalue.



错误! 好吧,主要是。如果引号是关于所有前缀/后缀运算符的,那么它是完全错误的。但是,如果说的是 ++--前缀/后缀对,那么它是正确的。

现在,考虑到这一点...

what is the rvalue returning from the *a++ so that it can be dereferenced?



假设 a是某种类型的指针,则 a++a递增,并产生一个由递增之前 a的值组成的右值。后缀和前缀形式的递增和递减运算符 ++--都需要一个左值作为其运算符。这是因为右值是临时的,也就是说,右值的范围受到其出现的表达式的限制,因此这些运算符对其几乎没有意义。请记住,这些运算符不仅检查/读取,而且更改/写入变量本身。

一元 *运算符采用一个指针(类似)对象并将其取消引用,从而在其中找到一个左值。它适用于右值和左值指针。这是因为 *可以视为一种“被动”运算符。它不会更改/写入指针本身,而是对其进行取消引用,并在指针存储的地址处返回左值对象,该地址当然是指针所包含的地址。因为 *所需要的只是指针对象中包含的内存地址,并且指针本身的地址(如果有的话)在这里毫无用处,因此 *对于rvalue和lvalue都是有意义的。

您可以认为 *“需要一个右值”,并且“如果需要更多地澄清(或混淆?)事情,则可以认为“必要时可以将左值用作右值”。

关于c++ - 右值如何取消引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122689/

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