【发布时间】:2014-12-26 22:49:32
【问题描述】:
我有这行代码:
front = (++front) % size;
在 C 中我没有收到警告,但在 C++ 中我收到警告 operation on front may be undefined [-Wsequence-point]。这种预增量使用如何导致未定义的行为?在我看来,这一行非常明确,会被解释为:
- 增加前端
- mod 前面有大小
- 为前面分配新值。
我的编译器只是抛出一个全面的警告吗?
附:如果我正在做类似front = front++; 或天堂禁止front = front++ + front++; 之类的事情,我理解警告。
编辑:此警告是使用 GCC (tdm-1) 4.6.1 在 Windows 64 上的 CodeBlocks 中产生的
【问题讨论】:
-
front++ vs ++front 在这里没有任何改变,等号的左边可能是后或前递增的值,具体取决于首先评估哪一侧。 AFAIK 没有义务在右侧之前评估 = 的左侧。
-
我认为 thndrwrks 的问题在于这样的想法,即在
%之后才能进行分配,而%直到(++front)之后才能发生分配,按顺序括在括号中给予++优先级,因此表面上看没有排序问题。虽然显然不是这样。我目前对规范还不够精通,无法给出明确的答案,但也许有人可以谈谈? -
伴侣。发帖前先搜索。
-
我理解并查看了那个特定的帖子,但我仍然不清楚为什么这会在 C++ 中产生警告,但在 C 中不会产生警告。编辑:事实上,答案甚至声明“
5) i = ++i + 1 ; //well defined behaviour”这类似于我的代码行。那么为什么我会收到警告呢? -
你为什么要这样做呢?为什么要修改
i两次?只需front = (front + 1) % size;。
标签: c++