参考链接:http://blog.jobbole.com/79228/
1 返回类型推导
在C++11中,lambda函数参数需要被声明为具体的类型。C++14放宽了这一要求,允许lambda函数参数类型使用类型说明符auto。
在C++11中,lambda函数参数需要被声明为具体的类型。C++14放宽了这一要求,允许lambda函数参数类型使用类型说明符auto。
代码简洁,并且可以增强重构。
实际使用模板参数
auto lambda = [] (auto x, auto y) {return (x + y); } //等同于 struct unnamed_lambda { template <typename T,typename U> auto operator()(T x, U y) const { return (x+y); } }; auto lambda = unnamed_lambda();
如果一个函数有多个返回路径,那么每个返回路径返回的值需要具有相同的类型。
auto f(int i) { if ( i < 0 ) return -1; else return 2.0 //编译会报错 }
2 可初始化的Lambda捕获
Lambda中捕获可以实现初始化,用逗号隔开,从左往右运行
auto y = [&r = x, x = x+1]()->int {...}
3 [[deprecated]]属性
[[deprecated]]标签放到声明的前面即可—可以是类,变量,函数,或者其他一些实体的声明,被放在class,enum等关键字之后,实体名之前。
标记过时的定义,不建议使用
class [[deprecated]] flaky { }; [[deprecated("Consider using something other than cranky")]] int cranky() { return 0; } int main() { flaky f; return cranky(); }
其他
二进制常量以前缀0b(或0B)开头,二进制数字紧随其后。
单引号字符作为数字分隔符,一百万可以是:1’000’000.00 或者 1’0’00’0’00.00
#include <iostream> int main() { int val = 0b11110000; std::cout << "Output mask: " << 0b1000'0001'1000'0000 << " "; std::cout << "Proposed salary: $" << 300'000.00 << " "; return 0; }