dede网站地图html,北京住房和城乡建设部网站,楼盘网站开发报价,设计一个网站多少钱目录 1. 可变参数模板
1.1 基本语法及原理 1.2 包扩展
1.3empalce系列接⼝
2. lamba
2.1 lambda的语法表达式
2.2 捕捉列表
2.3 lamba的原理 1. 可变参数模板
1.1 基本语法及原理
1. C11⽀持可变参数模板#xff0c;也就是说⽀持可变数量参数的函数模板和类模板11⽀持可变参数模板也就是说⽀持可变数量参数的函数模板和类模板可变数⽬的参数被称为参数包存在两种参数包模板参数包表⽰零或多个模板参数函数参数包表⽰零或多个函 数参数。 2. 我们⽤省略号来指出⼀个模板参数或函数参数的表⽰⼀个包在模板参数列表中class...或typename...指出接下来的参数表⽰零或多个类型列表在函数参数列表中类型名后⾯跟...指出 接下来表⽰零或多个形参对象列表函数参数包可以⽤左值引⽤或右值引⽤表⽰跟前⾯普通模板⼀样每个参数实例化时遵循引⽤折叠规则。 3. 可变参数模板的原理跟模板类似本质还是去实例化对应类型和个数的多个函数。 1.2 包扩展
1. 对于⼀个参数包我们除了能计算他的参数个数我们能做的唯⼀的事情就是扩展它当扩展⼀个包时我们还要提供⽤于每个扩展元素的模式扩展⼀个包就是将它分解为构成的元素对每个元素应⽤模式获得扩展后的列表。我们通过在模式的右边放⼀个省略号(...)来触发扩展操作。底层的实现细节如图所⽰。
2. C还⽀持更复杂的包扩展直接将参数包依次展开依次作为实参给⼀个函数去处理。
第一种展开方式 第二种展开方式 1.3empalce系列接⼝ 1. C11以后STL容器新增了empalce系列的接⼝empalce系列的接⼝均为模板可变参数功能上兼容push和insert系列但是empalce还⽀持新玩法假设容器为containerTempalce还⽀持直接插⼊构造T对象的参数这样有些场景会更⾼效⼀些可以直接在容器空间上构造T对象。 2. lambda
2.1 lambda的语法表达式 使用示例 2.2 捕捉列表
1. 第⼀种捕捉⽅式是在捕捉列表中显⽰的传值捕捉和传引⽤捕捉捕捉的多个变量⽤逗号分割。[xy z] 表⽰x和y值捕捉z引⽤捕捉。
2. 第⼆种捕捉⽅式是在捕捉列表中隐式捕捉我们在捕捉列表写⼀个表⽰隐式值捕捉在捕捉列表写⼀个表⽰隐式引⽤捕捉这样我们 lamba 表达式中⽤了那些变量编译器就会⾃动捕捉那些 变量。
3. 第三种捕捉⽅式是在捕捉列表中混合使⽤隐式捕捉和显⽰捕捉。[, x]表⽰其他变量隐式值捕捉x引⽤捕捉[, x, y]表⽰其他变量引⽤捕捉x和y值捕捉。当使⽤混合捕捉时第⼀个元素必须是或并且混合捕捉时后⾯的捕捉变量必须是值捕捉同理混合捕捉时后⾯的捕捉变量必须是引⽤捕捉。
4. lambda表达式如果在函数局部域中他可以捕捉lambda 位置之前定义的变量不能捕捉静态局部变量和全局变量静态局部变量和全局变量也不需要捕捉lambda 表达式中可以直接使 ⽤。这也意味着 lambda 表达式如果定义在全局位置捕捉列表必须为空。
5. 默认情况下 lambda 捕捉列表是被const修饰的也就是说传值捕捉的过来的对象不能修改mutable加在参数列表的后⾯可以取消其常量性也就说使⽤该修饰符后传值捕捉的对象就可以 修改了但是修改还是形参对象不会影响实参。使⽤该修饰符后参数列表不可省略(即使参数为空)。 2.3 lambda的原理