You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++17中折叠表达式使用&&或||时是否支持短路求值?规范依据?

关于C++折叠表达式的短路求值问题

先直接给结论:不是所有折叠表达式都遵循短路求值规则——只有当折叠操作符是&&或||时,才会遵循短路求值;使用其他操作符(比如+、*、,等)的折叠表达式会完整求值所有元素。

针对你第二个问题:在C++17标准中,使用&&或||的折叠表达式确实遵循短路求值规则。

标准中的明确规定

在C17官方标准(文档编号N4659,即C17的最终草案,与正式标准内容完全一致)的**[expr.fold]**章节下,明确说明了这一点:

折叠表达式的求值顺序由操作符的性质决定。对于逻辑与(&&)、逻辑或(||)以及逗号操作符的折叠表达式,求值是按顺序进行的(左折叠从左到右,右折叠从右到左),并且遵循对应操作符的短路求值规则——一旦可以确定最终结果,后续的元素求值会被立即终止。

举个简单的代码例子验证这个行为:

#include <iostream>

bool check(int n) {
    std::cout << "Checking " << n << "\n";
    return n != 0;
}

int main() {
    // 左折叠 &&,第一个元素返回false,后续调用直接被短路
    auto result = (check(0) && ... && check(3));
    std::cout << "Final result: " << std::boolalpha << result << "\n";
    return 0;
}

运行这段代码只会输出Checking 0和Final result: false,说明后面的check(1)、check(2)、check(3)都没有被执行,完全符合短路求值的预期。

内容的提问来源于stack exchange,提问作者Sydius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:53:48