【发布时间】:2011-08-30 00:42:52
【问题描述】:
假设我有这个代码:
unsigned int func1();
unsigned int func2();
unsigned int func3();
unsigned int x = func1() | func2() | func3();
C++ 是否保证首先调用 func1(),然后是 func2(),然后是 func3()?
或者编译器是否允许以任何感觉的顺序调用函数?
另外,如果编译器愿意,是否允许在这里实现短路优化? (例如,如果 func1() 返回 ~0,编译器是否可以决定不打扰调用 func2() 或 func3(),因为它知道它们的返回值不可能影响分配给 x 的值?)
【问题讨论】:
-
与问题无关,但与现在已删除的答案有关:没有评论的三票否决?来吧伙计们,分享知识,别傻了。 @Answerer:您的答案的第一部分不正确,子表达式可以按 any 顺序计算;这可能就是您被否决的原因。
标签: c++ short-circuiting operator-precedence bitwise-or