在发布了我最具争议的答案之一之后 here , 我敢问几个问题,最终填补了我知识上的一些空白。
为什么 ((type_t *) x)
类型的表达式不被认为是有效的左值,假设 x
本身是一个指针和一个左值,而不是只是一些表达?
我知道很多人会说“标准不允许”,但从逻辑的角度来看这似乎是合理的。标准不允许的原因是什么?毕竟,任何两个指针的大小都相同,指针类型只是编译时的抽象,指示在进行指针运算时应应用的适当偏移量。
最佳答案
一个更好的例子,一元 +
产生一个右值,x+0
也是如此。
根本原因是所有这些东西,包括你的 Actor ,都创造了新的值(value)。将一个值转换为它已经存在的类型,同样会创建一个新值,而不管指向不同类型的指针是否具有相同的表示形式。在某些情况下,新值恰好等于旧值,但原则上它是一个新值,不打算用作对旧对象的引用,这就是为什么它是右值。
要使这些成为左值,标准必须添加一些特殊情况,即某些操作在左值上使用时会导致对旧对象的引用,而不是新值。据我所知,对这些特殊情况的需求不大。
关于转换指针不会产生左值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446489/