首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我在成员函数中的lambda表达式的主体没有被执行?

为什么我在成员函数中的lambda表达式的主体没有被执行?
EN

Stack Overflow用户
提问于 2014-09-01 16:09:26
回答 2查看 190关注 0票数 2

最近我一直在研究lambda表达式,下面的lambda代码让我很惊讶:

代码语言:javascript
运行
复制
#include <iostream>

class lambda_this_test
{
private:
    int mNumber;
public:
    lambda_this_test()
    {
        mNumber = 11;
    };
    void print_member()
    {
        //lambda expression
        [this]{mNumber = 12; std::cout<< "mNumber = \n"<<mNumber<<std::endl;};
    }
};

int main()
{
    lambda_this_test testClass;

    testClass.print_member();
}

在执行时,看不到任何印记,因此似乎根本没有执行lambda表达式的主体,然后我使用gdb来证明这一点,因为print_member()函数中没有代码。

我可以问一下我的lambda用法有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2014-09-01 16:12:37

看起来您忘记执行您的lambda表达式了;您应该添加括号:

代码语言:javascript
运行
复制
[this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;} ();
//                                                          ^^

也就是说,下面的语句:

代码语言:javascript
运行
复制
[this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;};

仅声明lambda表达式。或者,您可以这样写:

代码语言:javascript
运行
复制
auto lambda = [this]{mNumber = 12; cout<< "mNumber = \n"<<mNumber<<endl;};

lambda();
票数 11
EN

Stack Overflow用户

发布于 2014-09-04 10:46:31

谢谢Piotr S,这一点现在很清楚了。Lambda表达式用于声明闭包对象。而lambda表达式的主体位于该闭包对象的operator()中,因此如果需要执行该主体,则应调用operator()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25601445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档