c-通过指针和获取地址来理解间接寻址



在标准N1570中,Section 6.5.3.2#3规定了以下内容(emp.min(:

如果操作数是一元*运算符的结果,则运算符或&对运算符进行求值,结果就好像两者省略了,只是对运算符的约束仍然适用并且结果不是左值

稍后6.5.3.2#4部分指定:

如果操作数指向函数,则结果为函数指示符;如果它指向一个对象,结果是一个左值,指定对象

我觉得这两部分很矛盾。我引用的第一部分指定result is not an lvalue,但第二部分指定间接运算符的结果是左值。

你能解释一下吗?这是否意味着在对象的情况下,运算符*&不相互消除?

第6.5.3.2#3节讨论一元&运算符,第6.5.3.2#4节讨论一元*运算符。他们有不同的行为。

精化(来自评论(:

关键是一元&不会产生左值,即使在它被认为是省略的情况下也是如此,因为它在解引用上下文中直接位于一元*之前。仅仅因为这两个运算符都被认为是省略的,并不能改变结果表达式不是左值的事实;与应用单独的一元CCD_ 10的情况相同。

int a; 
&a = ...; 

(显然(不合法。但也不是

int a; 
&*a = ...;

仅仅因为它们被认为是省略的并不意味着&*的左值等价于单独的a

最新更新