有哪位高手能给小弟我详细解释一上关于i++++与++++i的区别
有谁能给我详细解释一下关于i++++与++++i的区别
c++里面不太懂左值和右值的区别,谁能给我具体解释下,以i++++和++++i为例
------解决方案--------------------
啊,刚才我没说到点儿上。i++++ 应该是编译错误,因为 i++ 的结果为右值,后者不能再次 ++,因为 post ++ 要求操作数为左值。相比之下 ++++i 就没有问题,因为 ++i 的结果为左值,后者能够再次 ++.
------解决方案--------------------
好吧一时脑残惯性思维又错了。对于内建++,++++i等价于++(i+=1)即(i+=1)+=1,在C++98/03未定义,因为在sequence points之间修改了同一对象超过两次;但在C++11中求值顺序是确定的,因为每个+=修改左操作数的副作用保证sequenced before于整个+=表达式的值的计算,而每个+=表达式的子表达式计算sequenced before于+=的副作用。如果不考虑INT_MAX之类一次++就溢出导致UB,那么对于内建类型这里相当于i+=2。
c++里面不太懂左值和右值的区别,谁能给我具体解释下,以i++++和++++i为例
------解决方案--------------------
啊,刚才我没说到点儿上。i++++ 应该是编译错误,因为 i++ 的结果为右值,后者不能再次 ++,因为 post ++ 要求操作数为左值。相比之下 ++++i 就没有问题,因为 ++i 的结果为左值,后者能够再次 ++.
------解决方案--------------------
好吧一时脑残惯性思维又错了。对于内建++,++++i等价于++(i+=1)即(i+=1)+=1,在C++98/03未定义,因为在sequence points之间修改了同一对象超过两次;但在C++11中求值顺序是确定的,因为每个+=修改左操作数的副作用保证sequenced before于整个+=表达式的值的计算,而每个+=表达式的子表达式计算sequenced before于+=的副作用。如果不考虑INT_MAX之类一次++就溢出导致UB,那么对于内建类型这里相当于i+=2。