What is the lifetime of a C++ lambda expression?

前端 未结 4 924
长发绾君心
长发绾君心 2020-12-01 02:04

(I have read What is the lifetime of lambda-derived implicit functors in C++? already and it does not answer this question.)

I understand that C++ lambda syntax is j

4条回答
  •  日久生厌
    2020-12-01 02:25

    In the code that you posted:

    std::function meta_add(int x) {
        auto add = [x](int y) { return x + y; };
        return add;
    }
    

    The std::function object that is returned by the function actually holds a moved instance of the lambda function object that was assigned to local variable add.

    When you define a C++11 lambda that captures by-value or by-reference, the C++ compiler automatically generates a unique functional type, an instance of which is constructed when the lambda is called or assigned to a variable. To illustrate, your C++ compiler might generate the following class type for the lambda defined by [x](int y) { return x + y; }:

    class __lambda_373s27a
    {
        int x;
    
    public:
        __lambda_373s27a(int x_)
            : x(x_)
        {
        }
    
        int operator()(int y) const {
            return x + y;
        }
    };
    

    Then, the meta_add function is essentially equivalent to:

    std::function meta_add(int x) {
        __lambda_373s27a add = __lambda_373s27a(x);
        return add;
    }
    

    EDIT: By the way, I am not sure if you know this, but this is an example of function currying in C++11.

提交回复
热议问题