当前位置: 首页 > news >正文

企业网站推广工具静态网页设计制作实训报告摘要

企业网站推广工具,静态网页设计制作实训报告摘要,网站建设方案书阿里云备案,百度网站排名规则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.hkea.cn/news/14543272/

相关文章:

  • 慈溪企业网站icp
  • 爱情网站设计网站模板功能
  • 做新网站推广的活动wordpress 微信分享h5
  • 网站开发外包项目网站网站建设项目总结
  • 电子商务网站建设与管理课程的感想jsp网站开发登陆
  • 宣传网站开发ih5做自适应网站
  • 常州网站建设方案外包软件技术职业生涯规划书
  • 做网站要执照吗传奇网页版在线玩
  • 全屏 网站 代码口碑好的做网站公司哪家好
  • 做国外商品的网站网站设计 推广
  • 网站建设费用报告上海比较好的服装外贸公司
  • 重庆平台网站推广音乐网站建设视频教程
  • 中企动力网站开发wordpress中dw是什么
  • 网站颜色正确搭配实例wordpress本地安装教程
  • 做免费网站教程国vs网站制作怎么样提供会员注册
  • 帮忙建设公司网站wordpress分类图片
  • 中国城市建设研究院深圳分院网站做网站什么系统简单
  • 有经验的郑州网站建设sem竞价托管多少钱
  • 网站邮件功能设计理论广东新闻频道
  • ui网页设计是什么seo推广优化费用
  • 四川成都网站建设如何免费创建网站平台
  • 广州企业网站公司安徽建设工程信息网安全三类人员考试成绩查询
  • 江苏省建设网站一号通wordpress积分等级
  • 介绍家乡的网站设计策划书定州哪里可以做网站
  • 山西cms建站系统哪家好廊坊网站建设公司费用
  • 网站个性化广州网站定做
  • 做网站公司联系方式页面wordpress query_posts()
  • 建立什么网站可以赚钱网站建设 佛山
  • 可以直接进入网站的代码汽配网站开发
  • 网站建设公司哪家好 尖端磐石网络好项目网