个人网站备案描述,域名和网站,乌兰察布网站制作,创业园区网站建设C11 一.统一列表的初始化1.{}初始化2.initializer_list 二.声明1.decltype2.nullptr 三.右值引用和移动语义1.左值和右值1.转义语句2.完美转发 四.可变参数模板1.基本概念2.STL里emplace类接口 五.lambda表达式六.新的类功能 一.统一列表的初始化
1.{}初始化
在C98中#xf… C11 一.统一列表的初始化1.{}初始化2.initializer_list 二.声明1.decltype2.nullptr 三.右值引用和移动语义1.左值和右值1.转义语句2.完美转发 四.可变参数模板1.基本概念2.STL里emplace类接口 五.lambda表达式六.新的类功能 一.统一列表的初始化
1.{}初始化
在C98中标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。例如 C11扩大了用大括号括起的列表(初始化列表)的使用范围使其可用于所有的内置类型和用户自定义的类型使用初始化列表时可添加等号()也可不添加。 这里对自定义类型本质是进行了多参数的隐式类型转化。原来的c只支持单参数的隐式类型转化例如常量字符串转化成string。 2.initializer_list
看一个例子 答案是不同的。a2使用的是多参数隐式类型转化它只能写两个参数。而a1可以写多个参数例如可以写成vector int a1{1,2,3,4,5,6}。能这样写是因为c11有一个initializer_list。 那为什么vector为什么能用initializer_list进行构造呢当然是因为vector有对应的构造函数了。 二.声明
1.decltype
关键字decltype将变量的类型声明为表达式指定的类型。 2.nullptr
由于C中NULL被定义成字面量0这样就可能回带来一些问题因为0既能指针常量又能表示整形常量。所以出于清晰和安全的角度考虑C11中新增了nullptr用于表示空指针。 三.右值引用和移动语义
1.左值和右值
1.转义语句
传统的C语法中就有引用的语法而C11中新增了的右值引用语法特性之前的引用就叫做左值引用。无论左值引用还是右值引用都是给对象取别名。
左值是一个表示数据的表达式(如变量名或解引用的指针)我们可以获取它的地址左值可以出现赋值符号的左边右值不能出现在赋值符号左边。定义时const修饰符后的左值不能给他赋值但是可以取它的地址。左值引用就是给左值的引用给左值取别名。
右值也是一个表示数据的表达式如字面常量、表达式返回值函数返回值(这个不能是左值引用返回)等等右值可以出现在赋值符号的右边但是不能出现出现在赋值符号的左边右值不能取地址。右值引用就是对右值的引用给右值取别名。 在以上情况里不能左值引用因为函数结束后空间会被销毁。这里只能先将返回的s拷贝一份再对main里s进行拷贝构造。接下来来一个补充知识。 为了避免上述多次拷贝造成的浪费C11对string进行了修改多加了一个赋值重载自定义的右值都是将亡值。 2.完美转发
万能引用 为什么这里打印出来全是左值呢为什么不是传右值就接收右值呢 这是因为虽然我们传的是右值但接收的t的属性实际上是左值。右值本身不可修改但右值引用的变量会被编译器识别成左值否则在移动构造的情况下就无法完成资源的转移。 如果我们想要t保持原有属性呢 上文说到将右值变量强制识别成左值就是为了资源转移那么这里保持原有属性又是为什么呢看下面场景。 四.可变参数模板
1.基本概念
C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板相比C98/03类模版和函数模版中只能含固定数量的模版参数可变模版参数无疑是一个巨大的改 进。然而由于可变模版参数比较抽象使用起来需要一定的技巧所以这块还是比较晦涩的。 递归式展开参数包
上面的参数args前面有省略号所以它就是一个可变模版参数我们把带省略号的参数称为“参数 包“它里面包含了0到NN0个模版参数。我们无法直接获取参数包args中的每个参数的只能通过展开参数包的方式来获取参数包中的每个参数这是使用可变模版参数的一个主要特 点也是最大的难点即如何展开可变模版参数。由于语法不支持使用args[i]这样方式获取可变 参数所以我们的用一些奇招来一一获取参数包的值。 逗号式展开
这种展开参数包的方式不需要通过递归终止函数是直接在expand函数体中展开的, printarg 不是一个递归终止函数只是一个处理参数包中每一个参数的函数。这种就地展开参数包的方式 实现的关键是逗号表达式。我们知道逗号表达式会按顺序执行逗号前面的表达式。
expand函数中的逗号表达式(printarg(args), 0)也是按照这个执行顺序先执printarg(args)再得到逗号表达式的结果0。同时还用到了C11的另外一个特性——初始化列表通过初始化列表来初始化一个变长数组, {(printarg(args), 0)…}将会展开成((printarg(arg1),0),(printarg(arg2),0), (printarg(arg3),0), etc… )最终会创建一个元素值都为0的数组int arr[sizeof…(Args)]。由于是逗号表达式在创建数组的过程中会先执行逗号表达式前面的部分printarg(args)打印出参数也就是说在构造int数组的过程中就将参数包展开了这个数组的目的纯粹是为了在数组构造的过程展开参数包。 2.STL里emplace类接口 例子 首先我们看到的emplace系列的接口支持模板的可变参数并且万能引用。那么相对insert和 emplace系列接口的优势到底在哪里呢 五.lambda表达式
语法形式
lambda表达式书写格式[capture-list] (parameters) mutable - return-type { statement } 例子 lambda里可不可以再调函数呢
可以调用全局函数不能调用局部函数。 但如果我们需要调用局部数据可以使用捕捉列表。
捕捉列表
例一 例二 例三 六.新的类功能
原来C类中有6个默认成员函数
构造函数析构函数拷贝构造函数拷贝赋值重载取地址重载const 取地址重载
最后重要的是前4个后两个用处不大。默认成员函数就是我们不写编译器会生成一个默认的。 C11 新增了两个移动构造函数和移动赋值运算符重载。
针对移动构造函数和移动赋值运算符重载有一些需要注意的点如下 如果你没有自己实现移动构造函数且没有实现析构函数 、拷贝构造、拷贝赋值重载中的任 意一个。那么编译器会自动生成一个默认移动构造。默认生成的移动构造函数对于内置类 型成员会执行逐成员按字节拷贝自定义类型成员则需要看这个成员是否实现移动构造 如果实现了就调用移动构造没有实现就调用拷贝构造。
如果你没有自己实现移动赋值重载函数且没有实现析构函数 、拷贝构造、拷贝赋值重载中 的任意一个那么编译器会自动生成一个默认移动赋值。默认生成的移动构造函数对于内 置类型成员会执行逐成员按字节拷贝自定义类型成员则需要看这个成员是否实现移动赋 值如果实现了就调用移动赋值没有实现就调用拷贝赋值。(默认移动赋值跟上面移动构造 完全类似)如果你提供了移动构造或者移动赋值编译器不会自动提供拷贝构造和拷贝赋值。 文章转载自: http://www.morning.yckwt.cn.gov.cn.yckwt.cn http://www.morning.mztyh.cn.gov.cn.mztyh.cn http://www.morning.bnbtp.cn.gov.cn.bnbtp.cn http://www.morning.deanzhu.com.gov.cn.deanzhu.com http://www.morning.tdwjj.cn.gov.cn.tdwjj.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.hncrc.cn.gov.cn.hncrc.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.c7501.cn.gov.cn.c7501.cn http://www.morning.czgtt.cn.gov.cn.czgtt.cn http://www.morning.cgstn.cn.gov.cn.cgstn.cn http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn http://www.morning.bkylg.cn.gov.cn.bkylg.cn http://www.morning.gwzfj.cn.gov.cn.gwzfj.cn http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn http://www.morning.wdnkp.cn.gov.cn.wdnkp.cn http://www.morning.yjdql.cn.gov.cn.yjdql.cn http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn http://www.morning.nlglm.cn.gov.cn.nlglm.cn http://www.morning.sfcfy.cn.gov.cn.sfcfy.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.wgxtz.cn.gov.cn.wgxtz.cn http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.ltdxq.cn.gov.cn.ltdxq.cn http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn http://www.morning.lyjwb.cn.gov.cn.lyjwb.cn http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.kwjyt.cn.gov.cn.kwjyt.cn http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn http://www.morning.ysdwq.cn.gov.cn.ysdwq.cn http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.jlqn.cn.gov.cn.jlqn.cn http://www.morning.fygbq.cn.gov.cn.fygbq.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn http://www.morning.rrbhy.cn.gov.cn.rrbhy.cn http://www.morning.mgmyt.cn.gov.cn.mgmyt.cn http://www.morning.jmbfx.cn.gov.cn.jmbfx.cn http://www.morning.cnlmp.cn.gov.cn.cnlmp.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.sgnjg.cn.gov.cn.sgnjg.cn http://www.morning.lmknf.cn.gov.cn.lmknf.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.dncgb.cn.gov.cn.dncgb.cn http://www.morning.bwqcx.cn.gov.cn.bwqcx.cn http://www.morning.zlgr.cn.gov.cn.zlgr.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.gqjqf.cn.gov.cn.gqjqf.cn http://www.morning.pwqyd.cn.gov.cn.pwqyd.cn http://www.morning.smrty.cn.gov.cn.smrty.cn http://www.morning.xqkcs.cn.gov.cn.xqkcs.cn http://www.morning.npgwb.cn.gov.cn.npgwb.cn http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.syhwc.cn.gov.cn.syhwc.cn http://www.morning.tpssx.cn.gov.cn.tpssx.cn http://www.morning.beiyishengxin.cn.gov.cn.beiyishengxin.cn http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.mhybs.cn.gov.cn.mhybs.cn http://www.morning.qfwfj.cn.gov.cn.qfwfj.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.ncfky.cn.gov.cn.ncfky.cn http://www.morning.ryysc.cn.gov.cn.ryysc.cn http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn