1.using和typedef(作用:定义类型别名)

1)typedef和using都可以用来定义一个类型别名,二者在类型别名上定义没有区别。只是需要注意的是类型和类型别名的顺序,使用typedef定义类型别名的结构为 typedef 类型 类型别名;使用using定义类型别名的结构为using 类型别名=类型;

2)但在定义类型模板的情况下,只能使用using。

typedef的四大用途和两大陷阱(参考博客:https://blog.csdn.net/ameyume/article/details/6326278#commentsedit):博主介绍的特别详细。

typedef使用功能强大,主要分为一下四个方面的用途:1)定义一种类型别名,不等同于宏替换,特别是定义复杂结构类型的时候,如typedef char *Pstring; const Pstring mystring;这里定义的是一个常量指针mystring(由于typedef定义类型别名是一个指向char类型的指针,因此加上const之后只是说指针变成了常量指针),如果采用宏替换的话,得到的结果就是mystring是一个指向常量的指针。2)typedef可以帮助C中简化结构体的定义;没有使用typedef定义的结构体为:struct student_info{ int age; int ID;};struct student_info zhangsan;使用typedef定义的结构体为:typedef struct student_info{ int age; int ID;}Student_info; Student_info zhangsan;(这里的Student_info就是 struct student_info的别名,在C++结构体定义对象时可以不用使用typedef,因为C++定义对象不需要写struct)3)用typedef可以用来定义与平台无关的类型,标准库中的size_t就是采用这种方法,在做跨平台代码移植的时候,typedef的用途更加明显,只需要修改typedef本身的类型,而不需要修改源码)4)使用typedef可以简化复杂的声明,简化的规则是从外到里,逐层使用typedef替换,最后可以得到原声明的最简化版本。

typedef的两大陷阱在于:1)typedef是定义一个类型别名,分析代码的时候需要使用类型别名的含义去分析,而不能做类型替换去分析。2)typedef 就像 auto,extern,mutable,static,和 register 一样,是一个存储类关键字,在定义类型别名的时候,不能同时出现两个存储类的关键字。

2.auto和decltype(作用:获取对象或者表达式的类型)

为了方便在编程中了解某个对象或者表达式的类型,C++11提供了auto和decltype来得到表达式或者对象的类型。在此之前复习一下上一节中所述的顶层const和底层const的概念:1)顶层const:定义的变量本身是一个常量,如常量内置类型数据和常量指针;2)底层const:指针指向的数据或者引用绑定的数据是一个常量,如指针常量和常量引用;

使用auto类型说明符应注意以下几个规则:1)auto可以在一条语句中声明多个变量,但是多个变量的类型必须一致;2)使用auto时,编译器一般会忽略顶层const,保留底层的const,也就是要分析左侧auto的类型,右侧的顶层const属性去掉。3)在2)的基础上,如果希望保留右侧对象的顶层const属性,只需要在auto前面加上const即可;4)当使用auto来得到引用类型时,如果右侧是字面值常量时,需要在auto前面加上const,如 3)中介绍。使用auto类型说明符的结论是采用 1)2)来分析auto的类型,然后再使用句法来分析赋值是否正确。

使用decltype类型指示符需要注意一下几个规则:1)当decltype括号中的是一个变量,则返回的是变量的类型(包含顶层const和引用),可以使用decltype去获取引用(对象的别名)的类型,这里对于引用来说是个例外;2)当decltype括号中的类型是一个表达式时,则返回的是表达式结果的类型。3)如果括号中的是一个解引用或者给变量加多层括号,则返回的是引用类型(引用类型和解引用的结果或括号中的变量结果相同),因为变量是一种可以作为左值的特殊表达式(只有括号中是变量才是这种情况,否则多个括号情况就按表达式来分析);

auto和decltype的区别在于:auto是获取右侧数据的类型,并对变量进行赋值操作;而decltype只是为了获取括号中的表达式的类型,其结果类型和表达式的形式有关。

《C++ Primer 第五版》第二章(第5小节)——using和typedef,auto和decltype总结相关推荐

  1. 数据库系统概论第五版第二章习题6

    (SPJ数据库查询操作) 数据库系统概论第五版第二章习题6(SPJ数据库查询操作)_FunPony的博客-CSDN博客

  2. Spring实战第五版第二章字段校验返回视图报错解决及javax.validation完整pom依赖

    Spring实战第五版第二章 2.3 校验表单输入 在编写"/design"页面post处理逻辑时,按照书本上直接'return "design"; '方式,会 ...

  3. 电路 第五版 第二章 电阻电路的等效变换

    第二章电阻电路的等效变换 2-1 引言 2-2 电路的等效变换 2-3 电阻的串联和并联 2-4 电阻的Y形联结和△联结 2-6 实际电源的两种模型一起等效变换 2-7 输入电阻

  4. 数值分析(第五版) 第二章知识点总结

    仅供大致参考,有许多定义存在不严谨的地方:不同学校的考察重点自然是不同的 第二章 插值法 拉格朗日插值 Pn(x)=Ln(x)=∑i=0nf(xi)li(x)P_{n}(x)=L_{n}(x)=\su ...

  5. 计算机科学导论第五版第二章答案,计算机科学导论样题1答案

    一.填空题(每空1分,共15分) 1. 计算学科的根本问题是什么能被(有效地)自动进行. 2. 学科知识体由分枝领域.知识单元.知识点3个层次构成. 3. 在计算学科的抽象.理论.以及设计3个学科形态 ...

  6. 概率论与数理统计浙大第五版 第二章 部分习题+R代码

    4. (1) P ( X = k ) = q k − 1 p , k = 1 , 2 , 3 , . . . P(X=k)=q^{k-1}p,k=1,2,3,... P(X=k)=qk−1p,k=1, ...

  7. C++Primer第五版——习题答案+详解(完整版)

     C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...

  8. C++Primer第五版——习题答案详解

     C++Primer第五版--习题答案详解 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西每天收获如果不形成自己的体系的话,那将是毫无意义的,所以我觉得有必要将这本书先啃一遍,消化其 ...

  9. C++ primer第五版学习记录:第二章变量和基本类型

    C++ primer第五版学习记录:第二章变量和基本类型 断断续续把第二章看完用了大概两周时间,发扬一下之前默写的传统,顺便让自己梳理一下该章节的具体框架及结构.可能会有理解错误的地方,欢迎大家批评指 ...

  10. C++ Primer 第五版 第6章 6.2——函数参数传递习题答案

    理论讲解请参考:C++ Primer 第五版 第6章 6.2--函数参数传递阅读笔记 目录 6.10 指针形参交换两个数 6.12 引用形参交换两个数 6.13 6.14 6.15 6.16 6.17 ...

最新文章

  1. 一文读懂:完整的支付系统整体架构
  2. BERT论文阅读(二): CG-BERT:Conditional Text Generation with BERT for Generalized Few-shot Intent Detection
  3. 送给水深火热的 Gopher 们的解药
  4. 了解 SharePoint 2010 开发中的关键点
  5. np.radians_带有Python示例的math.radians()方法
  6. UI设计动效\动画素材模板|分层分步骤学习动效设计
  7. 使用yum命令时Error: Cannot find a valid baseurl for repo: base
  8. 正则表达式(思维导图速查版)
  9. Java中对象及常量,局部变量,全局变量的存储位置
  10. (转)何为人?是为忍!
  11. Linux下安装nodejs
  12. java较全的面试题
  13. 算力测试Linux,附录:计算力的标准Linpack测试详细指南(1)
  14. 朱松纯:走向通用人工智能——从大数据到大任务
  15. 无盘服务器0x00000124,知识分享电脑故障0x00000124导致蓝屏的原因和解决思路-电脑蓝屏原因...
  16. IDEA相同变量高亮显示
  17. GPIO的配置及使用(MC9S08AW60)
  18. java正则基本用法
  19. python自动化ppt_老男孩Python自动化开发12期完整精华版(含作业代码课件)
  20. IIR数字滤波器原理与应用

热门文章

  1. STM32之Systick(系统时钟滴答定时器)
  2. Android几秒后自动关闭dialog
  3. 设置UITableView设置contentsize
  4. 玩转Win32开发(2):完整的开发流程
  5. confluence 编辑器加载_Onlyoffice集成Confluence的工作原理
  6. mac mysql创建本地数据库_【mac】配置本地数据库
  7. flex 平铺布局_flex布局及各种布局的总结
  8. 28岁学python转行_28岁转行程序员,学Java还是Python?码农:想快点月薪过万就选它...
  9. c# mysql 插入 和 查询_C#对数据库的操作(增删改查)
  10. 电力电子、电机控制系统的建模和仿真_清华团队研发,首款国产电力电子仿真软件来啦~已捐赠哈工大、海工大、清华使用!...