逻辑&&与按位&在条件语句中的副作用:是C++规范还是实现特定?
C++中逻辑&&与按位&的求值规则差异
关于逻辑&&的短路求值
逻辑与运算符&&的短路求值是C++标准强制要求的行为,并非编译器实现的特定特性。
标准明确规定:&&的求值顺序为从左到右,当左侧操作数(比如示例中的run_i())求值结果为false时,右侧操作数(run_j())绝对不会被执行。所有符合C++标准的编译器都必须严格遵守这一规则,不存在例外情况。
关于按位&的操作数求值
按位与运算符&必须对左右两个操作数都进行求值,这同样是C++标准强制规范的行为,完全可以依赖。
需要注意的是,标准没有规定&左右操作数的求值顺序(比如先执行run_i()还是run_j()),但无论顺序如何,两个函数都会被调用,不会出现只执行一侧的情况。
结合你提到的场景:
while(run_i() && run_j()):若run_i()返回false,run_j()不会执行,导致j的相关逻辑完全不触发;while(run_i() & run_j()):无论run_i()返回值是什么,run_j()都会被执行,j的逻辑每次都会运行。
内容的提问来源于stack exchange,提问作者Ammar Tamimi
相关产品推荐
相关产品推荐

