C++ 面试题 目录

C++ 中 lambda 表达式的捕获列表 (capture list) 的用法

推荐答案

在C++中,lambda表达式的捕获列表用于指定lambda函数体中可以访问的外部变量。捕获列表的语法如下:

捕获列表可以有以下几种形式:

  1. 按值捕获:使用=符号,表示按值捕获所有外部变量。

  2. 按引用捕获:使用&符号,表示按引用捕获所有外部变量。

  3. 混合捕获:可以同时使用=&,并指定具体的变量。

  4. 捕获this指针:在类的成员函数中使用lambda时,可以捕获this指针。

  5. 捕获初始化表达式:C++14引入了捕获初始化表达式,允许在捕获列表中初始化变量。

本题详细解读

按值捕获

按值捕获意味着lambda表达式会复制外部变量的值,并在lambda函数体中使用这些副本。这意味着在lambda函数体中对这些变量的修改不会影响外部变量。

按引用捕获

按引用捕获意味着lambda表达式会直接引用外部变量,而不是复制它们。因此,在lambda函数体中对这些变量的修改会影响外部变量。

混合捕获

混合捕获允许你同时按值和按引用捕获不同的变量。你可以根据需要选择性地捕获变量。

捕获this指针

在类的成员函数中使用lambda时,捕获this指针允许lambda访问类的成员变量和成员函数。

-- -------------------- ---- -------
----- ------- -
-------
    ---- ------ -
        ---- ------ - -------- - ------------ - --- --
        ---------
    -
--------
    --- ------ - --
--

捕获初始化表达式

捕获初始化表达式允许你在捕获列表中初始化变量。这在C++14及更高版本中可用。

通过理解这些捕获方式,你可以更灵活地使用lambda表达式来处理不同的编程场景。

纠错
反馈