转换指针不会产生左值。为什么?

2024-01-05

在发布我最具争议的答案之一之后here https://stackoverflow.com/questions/7444464/read-bytes-methods-in-c-c/7444502#7444502,我敢于提出一些问题,最终填补了我知识上的一些空白。

为什么不是这样的表达((type_t *) x)被认为是有效的左值,假设x它本身是一个指针和一个左值,而不仅仅是一些表达式?

我知道很多人会说“标准不允许”,但从逻辑的角度来看,这似乎是合理的。标准不允许的原因是什么?毕竟,任何两个指针的大小相同,并且指针类型只是编译时抽象,指示在进行指针算术时应应用的适当偏移量。


一个更好的例子,一元+产生一个右值,就像x+0.

根本原因是所有这些东西,包括你的演员阵容,都创造了新的价值。将值转换为已有的类型,同样会创建一个新值,而不必介意指向不同类型的指针是否具有相同的表示形式。在某些情况下,新值恰好等于旧值,但原则上它是一个新值,它不打算用作旧对象的引用,这就是它是右值的原因。

对于这些左值,标准必须添加一些特殊情况,即对左值使用某些操作时会导致对旧对象的引用,而不是新值。 AFAIK 对这些特殊情况的需求并不大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换指针不会产生左值。为什么? 的相关文章

随机推荐