
[]{}是一个类型;[]{}()就可以调用,相当于临时对象;多数会写成最后一种形式,赋予一个名称auto I=[]{};I();

[]导入符号,mutuable是否可以被改写参数,throwSpec丢出异常,->retType表示返回类型;紫框可写可不写,但是如果写一个就必须要写();{}是函数本体;()里放函数参数;[]取用外部的变量;
(2)左侧相当于右侧建立一个仿函数类,重载();




(1)decltype用作获取Lmabda的类型;
(2)上面一段话的意思就是,lambda就一个无名的仿函数,但是每个都是独一无二的,因此,如果要声明这个类型就使用template或者auto,如果需要类型就使用decltype,例如当你需要使用lambda作为一个hash function或者排序准则传给不定序容器,具体例子代码如图所示;
(3)左侧是set<>coll(cmp);构造函数如箭头所指,
(4)下面一段话:在使用decltype获取lambda类型作为容器类型时,需要同时传入lambda作为构造函数参数,不然容器set会选择调用lambda的默认构造函数和默认赋值操作,但是lambda并没有默认构造,编译器就会报错;因此需要set<>coll(cmp);传入lambda的cmp;

左侧lambda就相当于一个inline内联函数,效率会比右侧仿函数更高;但是这点效率略显微不足道;
