C++ lambda 表达式中的值捕获模式是什么?(表达式.捕获.模式.lambda...)

wufei123 发布于 2024-08-19 阅读(32)

值捕获模式使用星号标识变量,复制变量值并添加 const 引用,创建只读副本,避免直接引用外部变量。

C++ lambda 表达式中的值捕获模式是什么?

C++ Lambda 表达式中的值捕获模式

Lambda 表达式是一种匿名函数,可以使用捕捉列表捕获外部变量。捕捉列表指定哪些变量从调用函数的环境中捕获。

值捕获模式

值捕获模式使用前面带星号(*)的变量名称,复制变量的值并在捕获变量列表的末尾添加一个 const 引用。此模式创建对该值的只读副本,而不会直接引用外部变量。

// 值捕获模式
int x = 10;
auto lambda = [&x] {
    std::cout << x << std::endl;  // 输出 10
};
示例

以下是展示值捕获模式的实战案例:

// 计算圆的面积
double calculateArea(double radius) {
    return 3.14 * radius * radius;
}

int main() {
    // 捕获 calculateArea() 函数中的 radius 变量值
    auto areaLambda = [&radius = 5.0] {
        std::cout << "半径为 " << radius << " 的圆的面积为 " << calculateArea(radius) << std::endl;
    };
    areaLambda();  // 输出 半径为 5 的圆的面积为 78.5
}

在该示例中,areaLambda lambda 表达式捕获外部函数 calculateArea 中 radius 变量的值,并将其用作计算圆的面积。即使 main 函数中的 radius 变量被修改,lambda 表达式仍然可以使用其捕获的值。

以上就是C++ lambda 表达式中的值捕获模式是什么?的详细内容,更多请关注知识资源分享宝库其它相关文章!

标签:  表达式 捕获 模式 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。