因此如果flag你希望它来代表布尔值,就应该始终把它设置为0或者1。
左值和右值(L-value和R-value),左值往往提供一个内存的位置,但并不是一份拷贝。右值代表一个值,可以是一份拷贝。
所以左值也可以是右值,但是右值不能成为左值。
比如:
a++ =b://wrong
b =a++; //right
a++并没有一个内存位置,有人会说a++必然会存在一个内存的位置,但是a++的结果是a的一份拷贝,其位置不certain。所以这个不是左值。
不同类型之间的值需要转换才能操作。
如果某个表达式过于依赖求值的顺序,那么应该尽力去避免,因为不同的编译器会产生不同的求值顺序,所以本质上表达式是不可移植的。
|