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

折叠表达式(fold expression)中Lambda未执行致vector为空,如何修复?

修复折叠表达式未执行导致std::vector为空的问题

你的代码问题出在折叠表达式里只定义了lambda但没有调用它,逗号运算符只是依次构造了多个lambda对象,但lambda内部的push_back逻辑完全没被执行,所以最终vector是空的。

修复方案一:调用lambda

在每个lambda定义后添加()执行它,让折叠表达式触发实际的插入操作:

#include <iostream>
#include <vector>
#include <memory>

template<typename... Args>
std::vector<std::shared_ptr<int>> createSourceVector(Args... args)
{
    std::vector<std::shared_ptr<int>> result;
    (
        [&]() {
            result.push_back(std::make_shared<int>(args));
        }(), // 新增()调用lambda
        ...);
    return result;
}

int main()
{
    auto sources = createSourceVector(1,2,3);
    std::cout << sources.size() << '\n'; // 现在输出3
    return 0;
}

修复方案二:直接折叠push_back操作

如果逻辑简单,完全可以省略lambda,直接对push_back操作进行折叠,代码更简洁:

#include <iostream>
#include <vector>
#include <memory>

template<typename... Args>
std::vector<std::shared_ptr<int>> createSourceVector(Args... args)
{
    std::vector<std::shared_ptr<int>> result;
    (result.push_back(std::make_shared<int>(args)), ...); // 直接折叠表达式
    return result;
}

int main()
{
    auto sources = createSourceVector(1,2,3);
    std::cout << sources.size() << '\n'; // 输出3
    return 0;
}

两种方案都能解决问题:第一种适合后续需要扩展复杂逻辑的场景,第二种更轻量化,适合简单的批量插入操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:07:38