MST

星途 面试题库

面试题:C++中C++ Lambda表达式捕获列表的基础应用

请编写一个C++ Lambda表达式,捕获外部作用域中的一个整数变量 `num`,并在Lambda内部将其值加倍后返回。同时说明捕获列表的两种常见捕获方式(值捕获和引用捕获)的区别。
21.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

代码实现

#include <iostream>

int main() {
    int num = 5;

    // 值捕获方式
    auto lambdaByValue = [num]() { return num * 2; };
    std::cout << "值捕获结果: " << lambdaByValue() << std::endl;

    // 引用捕获方式
    auto lambdaByReference = [&num]() { return num * 2; };
    std::cout << "引用捕获结果: " << lambdaByReference() << std::endl;

    return 0;
}

捕获列表两种常见捕获方式区别

  1. 值捕获
    • 在值捕获中,Lambda表达式会在创建时复制捕获变量的值。
    • 即使外部作用域中被捕获变量的值发生改变,Lambda内部使用的仍然是捕获时的副本值。例如在上述代码中,若在调用lambdaByValue()之前改变num的值,lambdaByValue()返回的结果不受影响,因为它使用的是捕获时num的副本。
  2. 引用捕获
    • 引用捕获方式下,Lambda表达式捕获的是变量的引用。
    • 这意味着如果外部作用域中被捕获变量的值发生变化,Lambda内部访问到的值也会随之改变。例如在上述代码中,若在调用lambdaByReference()之前改变num的值,lambdaByReference()返回的结果会反映num的新值,因为它使用的是num的引用。