- 论坛徽章:
- 5
|
回复 36# wwwsq
………………
我觉得你的逻辑能力……额,我不人身攻击……
好吧,我继续说,这里存在一个对标准最基本的理解问题。什么是值?某种类型的某种状态被称为值(我的理解)。即1是一个int值,2也是。这里表达的意思仅仅是,如果a具有什么值,让这个表达式有**同样的**值就可以了。这个值并不一定非要是a本身(你也知道,编译以后也未必有a本身这种东西了)。比如b是float 2.0,那么这个表达式的值“恰好”就是int 2,它“恰好”和赋值以后的a的值相等。但是这并不意味着必须要给a赋值以后,编译器才知道这个值是什么——毕竟,如果不知道这个值是什么,编译器如何给a赋值呢?最终的结果是,编译器手上有三件事情做:
1. 计算出要给a赋的值到底是什么(用b和a、b的类型去算)。
2. 把赋值的结果作为整个表达式的值,参与外界的运算。
3. 把赋值的结果真正地存到a里面去。
2和3的顺序(在整个顺序点范围内)都是任意的。编译器什么时候计算出了要赋给a的值到底是什么以后,可以在任意时刻做这种保存工作,而不是立即、在所有其他操作进行前、做这个操作。这就是标准这段话的全部含义。
而a = b, a > 0不同。逗号运算符会提供一个序列点,那么这个赋值操作就必须在比较之前进行,否则就是不符合标准。 |
|