gpt4 book ai didi

c++ - 按位或保证评估顺序?

转载 作者:IT老高 更新时间:2023-10-28 22:24:48 27 4
gpt4 key购买 nike

假设我有这个代码:

unsigned int func1();
unsigned int func2();
unsigned int func3();

unsigned int x = func1() | func2() | func3();

C++ 是否保证先调用 func1(),然后调用 func2(),再调用 func3()?

或者编译器是否允许以任何感觉的顺序调用函数?

另外,如果编译器愿意,是否允许在这里实现短路优化? (例如,如果 func1() 返回 ~0,编译器是否可以决定不打扰调用 func2() 或 func3(),因为它知道它们的返回值不可能影响分配给 x 的值?)

最佳答案

不,不能保证函数将被调用的顺序。与 || 不同,| 并不暗示顺序点。

必须调用表达式中的所有函数,除非实现可以确定它们没有副作用,并且它可以确定表达式的结果而无需实际调用其中一个函数。实现可以在“好像”规则下执行此操作,该规则允许实现执行任何符合标准的程序无法观察或检测到的优化。

关于c++ - 按位或保证评估顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6078542/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com