C++ 中函数和 lambda 之间有什么实际区别?

问题描述 投票:0回答:1

如果我是正确的,那么常规函数和 lambda 之间的主要区别在于常规函数定义是一个语句,而 lambda 函数定义是一个表达式。据我了解,这带来了实际结果,例如能够在代码中编写 lambda 定义,这是 lambda 的主要用法(以及将 lambda 作为参数传递并作为结果返回)。

同时,我在代码构造的许多地方看到如下所示,其中 lambda 定义为

constexpr
,它创建了包含匿名函数的 constexpr 实体。这种语法的实际原因是什么(我的意思是,为什么人们广泛使用它)以及这种定义与它下面的函数的定义不同的例子是什么?

constexpr auto lambda = []() {
};

void function()
{
}

int main()
{
    lambda();
    function();
}
c++ templates generics lambda
1个回答
0
投票

对于 lambda 的可组合性示例,这里是一个:

#include <iostream>

template<typename fn_t>
auto decorate(fn_t fn)
{
    auto decorated_fn = [=] {
        std::cout << "Some infrastructure before call\n";
        try
        {
            fn();
        }
        catch(const std::exception& e)
        {
            std::cout << "call failed : " << e.what() << "\n";
            return;
        }
        std::cout << "Some infrastructure after succesfull call\n";
    };
    return decorated_fn;
}

int main()
{
    auto decorated_fn = decorate([] { std::cout << "actual call\n"; });
    decorated_fn();
}
© www.soinside.com 2019 - 2024. All rights reserved.