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

wordpress 分类 标题北京seo公司

wordpress 分类 标题,北京seo公司,产品设计培训,公司网站建设需求前言 在11标准之前,auto在c中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。 对此, 在这里引入Cprimer中的原句: 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚的知道表达式的类型。然而…

前言

11标准之前,autoc++中是声明存储器类型的关键字。而在11标准中它的功能变为了类型推导。

对此, 在这里引入C++primer中的原句:

编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚的知道表达式的类型。然而要做到这一点并非那么容易,有时候甚至根本做不到。为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式所属的类型。和原来的那些对应的一种特定类型的说明符不同,auto让编译器通过初始值来推断变量的类型。显然,auto定义的变量必须具有初始值。

比如下面的代码:

 vector<int> vtr{ 0, 1, 2, 3, 4 };for (auto x : vtr)cout << x << ' ';

可以看出auto设计的基本思想就是想通过简短的auto占位符替代程序中长且杂的各种数据类型。从而增大开发效率。

显然想要auto实现这一目的需要满足——auto必须能够表示出程序中的所有数据类型。

auto的组合使用

auto不仅仅能够表示单独的数据类型,还可以和&*等类型标识符配合使用组成其他的数据类型,比如:

 int x = 0;auto *pt1 = &x; // pt1为int*, auto推导为 intauto pt2 = &x; // pt2为int*, auto推导为int*auto& r1 = x; // r1为int&, auto推导为intauto r2 = r1; // r2为int,auto推导为int

指针和引用作为栈区数据的左膀右臂,若只使用auto关键字,想要达到将int赋值给引用这种操作显然是做不到的。

int在赋值给auto时会不明确auto到底是普通类型还是引用类型而产生二义性,为了避免二义性,规定int类型赋值给auto依旧是int类型,若想要赋值给引用类型需要auto&配合使用。

这也与auto表示所有类型的理念不约而和。

autoconst

前面讲述和auto在设计时为了避免二义性会进行取舍操作,保证一种声明赋值语句只会对应一种类型。

但是这样同样会衍生一个问题——在避免二义性得时候如何选择。

假设我们作为C++语言的设计者,在选择时肯定会更偏向于更自由的一方,毕竟C++的设计理念就是既想保留C的自由,又想发展自己的东西。

接下来我就会列举几个autoconst的组合。并从是否合法,涵盖全面,更自由的选择等方面来分析编译器为何会如此选择。

要补充一点,可能有的时候看似auto有多种选择,因为在C++中赋值语句是支持隐式类型转换的,但是实际上auto作为"万能的数据类型",其在设计时就应当规避掉类型转换的操作,所以在分析时我不会考虑类型转换的选择。

 int x = 0;const auto n = x; // auto会被推导为 intauto f = n; // const在取值时没有限定,因此编译器会将auto处理为int,显然int会比const int涵盖面更广​const auto& r1 = x; // auto会被翻译成int, 当然也有可能会被翻译成const int, 不过在编译器中多个const和一个const效果相同​// int& r3 = n; 这样赋值编译器会报错auto& r2 = n; // r2会被翻译成const int, 因为const int数值是不能赋值给int引用的,所以编译器选择const int
  1. const auto n = xxint类型,而auto前面有const限定符,显然这里的auto只能被推导为int类型。

  2. auto f = n:前面我们分析了nconst int类型,而const int类型允许赋值给const int,和int类型,有两种选择,最终选择int

    主要从两方面分析,一方面是我们所说的自由性,若想要赋值给const int类型可以在auto前加上const限定符。

    const int无法添加限定符将其变为int类型,所以显然int要比const int更自由。

    另一方面,如果auto在这里被推导为const int类型,那么你会发现没有一种情况可以使const int类型赋值给autoauto被推导为int了,这违背了auto的设计理念。

  3. const auto& r1 = x:会被翻译为int,不多讨论。

  4. auto& r2 = nnconst int类型,而在c++中只允许const int类型赋值给const int&类型(这里不是说不能赋值给其他,只是说若要赋值给引用则必须加const限定符),所以这里也只能是const int&

总结

借用C++primer中的一句话:

auto一般会忽略掉顶层const,同时底层const则会保留下来。

比如在a = b这种赋值语句中,尽管bconst限定,但其实a是直接将b中的数据拷贝过来,auto会直接忽略掉const

而在&a = b这种语句中,a实际上是保存的b的地址,auto就会保留下const


文章转载自:

http://04k6CgjY.ynwdk.cn
http://xgmNIsJn.ynwdk.cn
http://XjqmM5BJ.ynwdk.cn
http://h9xmBuOH.ynwdk.cn
http://VJAWLQv2.ynwdk.cn
http://3ciU64lm.ynwdk.cn
http://J6SeKB2R.ynwdk.cn
http://7Z1i4s7a.ynwdk.cn
http://Uiv4Nef1.ynwdk.cn
http://RlRaZkLa.ynwdk.cn
http://11NhhVCd.ynwdk.cn
http://19VwOmyt.ynwdk.cn
http://YYK6z8e5.ynwdk.cn
http://Pb5B3GeO.ynwdk.cn
http://ImOOvqp2.ynwdk.cn
http://g2GFxzbS.ynwdk.cn
http://2WRAUkRj.ynwdk.cn
http://XWphjzWT.ynwdk.cn
http://3ShtGGe6.ynwdk.cn
http://wN7am8UC.ynwdk.cn
http://7VkkhZiR.ynwdk.cn
http://hfEjVoj5.ynwdk.cn
http://v0y5XyRW.ynwdk.cn
http://5l0uWMGS.ynwdk.cn
http://DxPpwG0t.ynwdk.cn
http://8SOpQ5xj.ynwdk.cn
http://qwzOD0ny.ynwdk.cn
http://u8EZKUfI.ynwdk.cn
http://Em9T0qkI.ynwdk.cn
http://TC8NJPGV.ynwdk.cn
http://www.dtcms.com/wzjs/727214.html

相关文章:

  • 手机网站后期维护聊城开发区人才网
  • 网站域名跟谁买万链网站做的怎么样
  • 微信制作宣传网站有哪些湖北网络推广有限公司
  • 示范高校建设网站东方商易网站开发
  • 什么是网络营销?如何理解网络营销专业全网优化
  • 咸阳做网站费用西安莲湖区建设局网站
  • 网站网页价格百度收录网站的图片
  • 哪些网站做的不好北京广告设计公司哪家好
  • weex做的网站怎么用手机做网站教程
  • 网站开发社区百度代运营
  • 大连企业网站排名网站logo用什么做
  • 怎样才能创建网站网页设计实训报告的目的
  • 聊城网站推广WordPress VIP充值
  • 做百度移动端网站软件wordpress page模板页
  • 网站建设管理考核办法wordpress文章排列顺序
  • 能打开各种网站的浏览器推荐公司网站管理规定
  • 网站建设公司 成本结转新能源电动汽车价格表
  • 虚拟空间可以做视频网站么做网站的准备什么
  • 设计商城网站建设义乌廿三里
  • 英文网站title镇江市建设招标网官方网站
  • 网站的流程网站怎样做银联支付
  • 做网站建设电话销售wordpress无法打开
  • 让网站百度不到不备案网站怎么做淘宝客
  • 自命题规划一个企业网站oa办公软件
  • 做ppt的软件模板下载网站wordpress如何配置伪静态页面
  • 什么网站可以找人做系统怎么外贸网站推广
  • 网站费用预算工程造价价格信息网
  • 网站建设主要干什么永春网站开发
  • 怎么给甲方做网站备案自己架设网站
  • 福州网站设计要多少钱新郑网站建设