Bla*_*iev 12 c pointers casting lvalue
发布我最有争议的一个回答后在这里,我不敢问几个问题,并最终在我的知识填补一些空白.
为什么不是一种((type_t *) x)被认为是有效左值的表达式,假设它x本身是指针和左值,而不仅仅是某个表达式?
((type_t *) x)
x
我知道很多人会说"标准不允许它",但从逻辑的角度看它似乎是合理的.标准不允许的原因是什么?毕竟,任何两个指针都具有相同的大小,指针类型只是一个编译时抽象,指示在进行指针运算时应该应用的适当偏移量.
Jen*_*edt 8
演员的结果本身并不是左右.但是*((type_t *) x)是左值.
*((type_t *) x)
Ste*_*sop 7
一个更好的例子,一元+产生一个右值,就像这样x+0.
+
x+0
根本原因是所有这些事情,包括你的演员,都会创造一个新的价值.将值转换为它已经存在的类型,同样会创建一个新值,不管是指向不同类型的指针是否具有相同的表示形式.在某些情况下,新值恰好等于旧值,但原则上它是一个新值,它不打算用作旧对象的引用,这就是它为rvalue的原因.
对于这些是左值,标准必须添加一些特殊情况,当在左值上使用某些操作时会导致对旧对象的引用,而不是新值.AFAIK对这些特殊情况没有太大需求.
归档时间:
14 年,5 月 前
查看次数:
3925 次
最近记录:
9 年,1 月 前