加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 前/后增量的左值和右值

发布时间:2020-12-16 04:52:13 所属栏目:百科 来源:网络整理
导读:学习左值和右值.定义是任何可以是“地址”的是左值,否则,它是rvalue. 我检查了运算符优先级,前缀和后缀增量都比“地址”运算符具有更高的优先级. 对于以下两个例子,任何人都可以解释为什么第一个“ value1”是左值,而第二个“ value1”是右值. 我对这两种情
学习左值和右值.定义是任何可以是“地址”的是左值,否则,它是rvalue.

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

对于以下两个例子,任何人都可以解释为什么第一个“& value1”是左值,而第二个“& value1”是右值.

我对这两种情况的错误理解是:pValue1指向value1变量.无论在构建地址关联之前或之后将value1更改为8,value1变量总是占用一个内存位置,我们可以派生它的地址,对吧?

int value1=7;

int *pValue1=&++value1;

int *pValue1 = &value1++;

解决方法

根据我的评论,你可以看到编译器为什么反对这种操作.问题在于postfix运算符的一般实现,它复制对象(在本例中为int),递增原始对象并返回该预先增加的副本.您可以将其视为以下列方式定义的函数:
int foo_operator(int& a)
{
    int copy = a;
    a += 1;
    return copy;
}

如果您尝试在示例中使用该函数,则编译器也会对其进行抗议.该函数的返回值是一个右值.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读