【发布时间】:2010-10-11 21:57:52
【问题描述】:
好的,我知道标准规定 C++ 实现可以选择函数的参数评估顺序,但是在实际会影响的情况下,是否有任何实现实际上“利用”这一点程序?
经典例子:
int i = 0;
foo(i++, i++);
注意:我不是在找人告诉我不能依赖评估顺序,我很清楚这一点。我只对是否有任何编译器真的按照从左到右的顺序进行评估感兴趣,因为我的猜测是,如果他们做了很多写得不好的代码会中断(这是正确的,但他们仍然可能会抱怨)。
【问题讨论】:
-
用不同的编译器自己试试?
-
在为 c++ 的子集实现解释器时问了自己同样的问题。唷。
-
请注意
foo(i++,i++)调用未定义的行为,因为i在没有任何干预任何序列点的情况下递增超过一。 -
clang 使用从左到右的评估。
-
使用 C++ 时,您应该始终使用静态代码检查器。任何称职的人都会指出这个错误。