gpt4 book ai didi

c++ - 前/后增量的左值和右值

转载 作者:可可西里 更新时间:2023-11-01 18:26:11 27 4
gpt4 key购买 nike

学习左值和右值。定义是任何可以是“地址”的东西都是左值,否则就是右值。

我检查了运算符的优先级,前缀和后缀增量都比“地址”运算符具有更高的优先级。

对于下面的两个例子,谁能解释一下为什么第一个“&++value1”是左值而第二个“&value1++”是右值。

我对这两种情况的错误理解是:pValue1 指向 value1 变量。无论在建立地址关联之前还是之后将value1改为8,value1变量总是占据一个内存位置,我们可以推导出它的地址,对吧?

int value1=7;

int *pValue1=&++value1;

int *pValue1 = &value1++;

最佳答案

根据我的评论,您可以了解为什么编译器反对这种操作。问题在于后缀 operator++ 的一般实现,它复制对象(在本例中为 int),增加原始对象并返回该preincremented copy 。您可以将其视为按以下方式定义的函数:

int foo_operator(int& a)
{
int copy = a;
a += 1;
return copy;
}

如果您尝试在您的示例中使用该函数,您的编译器也会反对它。该函数的返回值是一个右值

您现在可能会问 - 前缀 operator++ 有什么用?这不也是一个返回值的函数吗? 答案是 - 。前缀 operator++ 返回引用,而不是复制值,因此它的“结果”可以与操作数 & 一起使用。

关于c++ - 前/后增量的左值和右值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46105726/

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