C++ lambda 表达式(匿名函数)

标签 c++ lambda c++11

<分区>

Possible Duplicate:
What is a lambda expression in C++11?

我在 C++ 中发现了这个表达式(C++11 最激动人心的特性之一):

int i = ([](int j) { return 5 + j; })(6);

为什么我得到 11?请解释这个表达式。

最佳答案

[](int j) { 返回 5 + j; 是一个将 int 作为参数并将其称为 j 的 lambda。它将 5 添加到此参数并返回它。表达式后的 (6) 立即调用 lambda,因此您将 6 和 5 相加。

大致相当于这段代码:

int fn(int j) {
    return 5 + j;
}

int i = fn(6);

当然,除了它不创建命名函数。聪明的编译器可能会内联 lambda 并进行常量折叠,从而简单地简化为 int i = 11;

关于C++ lambda 表达式(匿名函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765442/

相关文章:

c++ - gluPerspective 不工作

c# - 创建用于字符串连接两个对象的表达式树

language-agnostic - Lambda 函数的理论基础

c++ - 关于 Boost Signals2,没有名为 'apply' 的类模板

c++ - Intellisense 与编译器 : "A namespace with this name does not exist" vs "not a class or struct name" 不一致

c++ - 在 Mac OS X 上使用 clang llvm3.6 命令行工具的哈希问题

c++ - 从 lambda 返回局部变量到 const ref

c++ - new 和 delete 在 C++14 中仍然有用吗?

c++ - clang 无法在模板实例化时生成默认的移动构造函数

c++ - 如何调用这个函数指针