C++ Lambda表达式特殊写法疑问:为何末尾带有参数列表?
关于Lambda表达式定义后立即调用的解释
你看到的[](...){}(n3, n4, x, r2);其实是定义匿名lambda表达式之后,立刻调用它的写法,拆成两部分看就完全清晰了:
[](...){}:这是完整的lambda表达式,完全符合你看到的“以{函数体}结尾”的规则——[]是捕获列表,(...)是参数列表,{}是函数体,这部分本身就是一个可调用的函数对象。(n3, n4, x, r2):这是对刚才定义的lambda进行调用的语法,和你调用普通函数func(a,b,c)的逻辑一样,把参数传递给lambda的参数列表,执行函数体里的逻辑。
这种写法常用于需要临时执行一段逻辑、又不想单独命名函数的场景,本质上和下面的代码等价:
auto temp_lambda = [](...){}; temp_lambda(n3, n4, x, r2);
内容的提问来源于stack exchange,提问作者Gymkata
相关产品推荐
相关产品推荐

