既然 对 a= (b= ( c=d))) 没意见 那就好说了
编译器对 变量值的读取顺序可能会不同,但对于操作符的运算顺序是 不会变的
也就是说 有可能 先计算出 a=b 中变量的值,但不会执行赋值运算。
编译器对一个优先级内的运算顺序是明确的,如果两个优先级相同,那么是否先执行哪个是未定义的
比如 (a^=b)+(b^=c) 这个里面 先计算括号内的哪个 是未定仪的
但对于a= (b= ( c=d))) 几个赋值运算并不在同一级别内,所以 肯定是先计算c=d,把值赋给b,如果已经计算过b的值,那么就会刷新了
我在VS VC Linux下的gCC还有TC 这样赋值都没问题
这个不属于基础吧,而且此问题并非我没有考虑过的,得出的结论就是可以交换
几个主流编译器没有歧义可以我才会用的
编译器对 变量值的读取顺序可能会不同,但对于操作符的运算顺序是 不会变的
也就是说 有可能 先计算出 a=b 中变量的值,但不会执行赋值运算。
编译器对一个优先级内的运算顺序是明确的,如果两个优先级相同,那么是否先执行哪个是未定义的
比如 (a^=b)+(b^=c) 这个里面 先计算括号内的哪个 是未定仪的
但对于a= (b= ( c=d))) 几个赋值运算并不在同一级别内,所以 肯定是先计算c=d,把值赋给b,如果已经计算过b的值,那么就会刷新了
我在VS VC Linux下的gCC还有TC 这样赋值都没问题
这个不属于基础吧,而且此问题并非我没有考虑过的,得出的结论就是可以交换
几个主流编译器没有歧义可以我才会用的
How are you 怎么是你?
How old are you 怎么老是你?