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

c – 右值转换的左值是否会发生?

发布时间:2020-12-16 09:39:09 所属栏目:百科 来源:网络整理
导读:C++ Standard (4/5) the lvalue-to-rvalue conversion is not done on the operand of the unary operator. 例如: int x;int *p = x; 在上面的例子中,p是 x两个左值?或者什么是恰当的例子? 编辑: 那这个呢? int r = x; 我确信在这个声明中没有转换,但我

C++ Standard (4/5) the lvalue-to-rvalue conversion is not done on the
operand of the unary & operator.

例如:

int x;
int *p = &x;

在上面的例子中,p是& x两个左值?或者什么是恰当的例子?

编辑:

那这个呢?

int &r = x;

我确信在这个声明中没有转换,但我很困惑&操作符涉及到这个?

解决方法

引用说,转换不适用于一元&的操作数. (在这种情况下,x).所以&的操作数是一个左值.

这与一元运算符不同.如果你写x,那么lvalue-to-rvalue转换应用于子表达式x(在这种情况下具有未定义的行为,因为x尚未初始化).

非正式地,“左值到右值的转换”意味着“读取价值”.

引用并未说明&的结果,实际上它是一个右值.在int * p =& x;:

> x是左值,指的是该名称的变量,
>& x是一个rvalue,它是初始化程序的一部分(具体来说,是赋值表达式),
> p既不是右值也不是左值,因为它不是(子)表达式.它是正在定义的变量的名称.在C声明符语法中,它是declarator-id(C 03标准中的8/4).

int& r = x;不使用&完全是操作符的地址. &声明符中的字符只是语法,意思是r是引用到int,它不是取r的地址.在C声明符语法中,它实际上称为ptr-operator.

(编辑:李大同)

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

    推荐文章
      热点阅读