在发布我最具争议的答案之一之后here https://stackoverflow.com/questions/7444464/read-bytes-methods-in-c-c/7444502#7444502,我敢于提出一些问题,最终填补了我知识上的一些空白。
为什么不是这样的表达((type_t *) x)
被认为是有效的左值,假设x
它本身是一个指针和一个左值,而不仅仅是一些表达式?
我知道很多人会说“标准不允许”,但从逻辑的角度来看,这似乎是合理的。标准不允许的原因是什么?毕竟,任何两个指针的大小相同,并且指针类型只是编译时抽象,指示在进行指针算术时应应用的适当偏移量。
一个更好的例子,一元+
产生一个右值,就像x+0
.
根本原因是所有这些东西,包括你的演员阵容,都创造了新的价值。将值转换为已有的类型,同样会创建一个新值,而不必介意指向不同类型的指针是否具有相同的表示形式。在某些情况下,新值恰好等于旧值,但原则上它是一个新值,它不打算用作旧对象的引用,这就是它是右值的原因。
对于这些左值,标准必须添加一些特殊情况,即对左值使用某些操作时会导致对旧对象的引用,而不是新值。 AFAIK 对这些特殊情况的需求并不大。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)