【问题标题】:Simple lambda function I could not understand我无法理解的简单 lambda 函数
【发布时间】:2018-12-03 23:13:03
【问题描述】:

我正在使用 const 学习 C++14 lambda,今天我的朋友向我展示了以下内容。没看懂。

  1. 它是 lambda 函数吗?语法与我通常看到的不符。

  2. 它的语法与 lambda 函数匹配,但失败并出现长错误。

int main()
{
    // 1.
    const auto x = [&]{
        auto l = 0;
        l = 99;
        return l;
    }();

    std::cout << x << endl;

    // 2.    
    const auto y = [&](){
        auto l = 0;
        l = 99;
        return l;
    };

    std::cout << y << endl;   

    return 0;
}

我想知道1是什么,为什么2编译失败。

【问题讨论】:

    标签: c++ lambda c++14 auto


    【解决方案1】:

    我想知道什么是 1. 以及为什么 2. 无法编译。

    (1)

    const auto x = [&]{
            auto const_val = 0;
            const_val = 99;
            return const_val;
        }();
    // ..^^  <--- execution
    

    这是不接收参数的 lambda 的定义执行(因此[&amp;] 之后的() 部分是可选的,在这种情况下被省略)。

    所以x 是一个intconst int),用99(lambda 返回的值)初始化

    如您所见,lambda 中整数变量的名称 const_val 是假的,因为该变量是用 0 初始化的,然后修改为它分配值 99

    (2)

    const auto y = [&](){
    auto l = 0;
    l = 99;
    return l;
    };
    

    这只是不接收参数的 lambda 的定义(不执行)。

    所以y 是一个包含 lambda 的变量(嗯,一个常量),并且当您编写时

    std::cout << y << endl; 
    

    你得到一个错误,因为没有为 lambda 定义输出;你应该试试

    std::cout << y() << endl;
    

    执行 lambda 并打印返回值(再次99)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-11
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多