【问题标题】:Error while pushing elements to a vector inside a lambda function将元素推送到 lambda 函数内的向量时出错
【发布时间】:2016-07-01 15:23:27
【问题描述】:

以下代码行给出错误:

std::vector<std::string> strVect;
auto pushToVector = [strVect] () {
    strVect.push_back(std::string("Hi"));
};
pushToVector ();

错误 C2663: 'std::vector<_ty>::push_back' : 2 个重载对 'this' 指针没有合法转换

但是当我在 lambda 中通过引用传递 strVect 时没有错误。

std::vector<std::string> strVect;
auto pushToVector = [&strVect] () {
    strVect.push_back(std::string("Hi"));
};
pushToVector ();

没有错误

请告诉我为什么我们在第一个场景中会出错?

【问题讨论】:

    标签: c++11 lambda


    【解决方案1】:

    复制使用 [variable] 语法对 lambda 可见的变量。 lambda 的 operator() 也是 const,除非指定了 mutable

    std::vector<std::string> strVect;
    auto pushToVector = [strVect] () mutable {
        strVect.push_back(std::string("Hi"));
    };
    pushToVector ();
    

    但是,它并没有做任何有用的事情,因为它会将strVectpush_back 元素复制到其中,并且在从 lambda 返回后,副本就消失了。

    【讨论】:

    • 变量不是const,函数调用运算符是。
    猜你喜欢
    • 2019-03-12
    • 2017-06-17
    • 2023-03-26
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2018-04-13
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多