【发布时间】:2011-09-21 21:11:48
【问题描述】:
让我举个例子:
a = ++a;
据说上面的语句有未定义的行为(我已经在SO上阅读了关于UB的文章)
但根据优先规则运算符前缀++的优先级高于赋值运算符=
所以a 应该首先增加然后分配回a。所以每一个评价都是已知的,那为什么是UB呢?
【问题讨论】:
-
只是为了好玩,显然在 C++11 中,该语句似乎被完美定义,与
a = a++;(stackoverflow.com/questions/4176328/…) 不同。能够大喊“未定义的行为”会更有趣,但现在必须更加小心...... -
++a不保证先设置a,然后返回新值。只有a将设置在下一个序列点之前的某个时间,并且将返回a + 1。
标签: c++