Cocos2d-x_C++11新特性Lambda表达式
发布时间:2020-12-14 16:21:09 所属栏目:百科 来源:网络整理
导读:C++11 新增了很多特性,Lambda表达式是其中之一。很多语言都提供了 Lambda表达式,如 Python,Java 8。Lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 Lambda表达式。 C++11 的
C++11 新增了很多特性,Lambda表达式是其中之一。很多语言都提供了 Lambda表达式,如 Python,Java 8。Lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 Lambda表达式。 C++11 的 Lambda表达式规范如下:
其中
mutable修饰符说明 Lambda表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。 exception说明 Lambda表达式是否抛出异常( attribute用来声明属性。 另外,capture指定了在可见域范围内 Lambda表达式的代码内可见得外部变量的列表,具体解释如下:
此外,params指定 Lambda表达式的参数。 C++新特性Lambda表达式例子:
#include <vector> #include <iostream> #include <algorithm> #include <functional> int main() { std::vector<int> c { 1,2,3,4,5,6,7 }; int x = 5; c.erase(std::remove_if(c.begin(),c.end(),[x](int n) { return n < x; } ),c.end()); std::cout << "c: "; for (auto i: c) { std::cout << i << ' '; } std::cout << 'n'; // the type of a closure cannot be named,but can be inferred with auto auto func1 = [](int i) { return i+4; }; std::cout << "func1: " << func1(6) << 'n'; // like all callable objects,closures can be captured in std::function // (this may incur unnecessary overhead) std::function<int(int)> func2 = [](int i) { return i+4; }; std::cout << "func2: " << func2(6) << 'n'; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |