一个值:[x]
一个引用 [&x]
当前范围内任意变量的引用 [&]
同3,但是通过变量的值
你可以对上面的各项进行任意混合,只要用逗号隔开即可 [x, &y]
Argument List 参数列表
参数列表和 C++ 函数的参数列表是一个概念。
Function Body 函数体
函数体是指在 Lambda 表达式被调用时真正执行的代码。
Return Type Deduction
返回值推断
如果 Lambda 表达式只有一个返回声明,那么返回值类型就可以省略,其类型就是隐式类型:decltype(return_statement)
可变 Labmda
如果一个 Lambda 表达式被标记为 mutable(例如:[]() mutable{ }),那么对于按值捕获的数值来说,在函数体内就允许对这些值进行修改操作。
下面举个例子:
int main()
{
char s[]="Hello World!";
int Uppercase = 0;
//lambda会改变这个变量的值
for_each(s, s+sizeof(s), [&Uppercase] (char c) {
if (isupper(c))
Uppercase++;
});
cout<< Uppercase<<" uppercase letters in: "<< s<<endl;
}
Unique 指针
Unique 指针是 C++11 版本的智能指针类。
一旦你用 unique_ptr 关键字定义了一个对象,那么下列事件只要发生一个,对象就会被销毁并释放内存:
unique_ptr 管理的对象被销毁。
unique_ptr 管理的对象通过赋值操作符指向另一个指针,或调用了reset()方法。
对于不想了解太多细节的用户来说,这就意味着如果你使用了 unique 指针的语义,那么在跳出作用域之前,你就不用手动回收对象的内存了。
以前,我们需要这么写代码:
YourObject * obj = new YourObject();
然后在程序的最后你一定要记得释放内存:
delete(obj);
否则你可就造成内存泄露了。而现在,
std::unique_ptr<YourObject> obj(new YourObject());
当 obj 跳出作用域范围之外的时候,内存将会被自动回收。










