处理类型(auto,decltype)----C++初学之路
来源:互联网 发布:ubuntu u盘安装 编辑:程序博客网 时间:2024/06/16 19:31
*以下是自己自学C++prime的一些自己的理解,不保证权威*
先说说处理类型,什么是处理类型,就是在我们声明变量,声明各种东西,我们要用到int double 等等数据类型,越是到后面
这类的类型会越来越多,并且随着表达式的复杂,数据的类型很难去掌控,所以我们需要一种东西来让我们能够在定义类型的情况
下不容易出错,于是就有了auto与decltype。
1.typedef与using:举几个例子就能明白:
typedef int wages;//这里wages就等于了int
wages a1,a2;//a1与a2就是int类型的数a1=3.14;//a1等于3
using si=int;//这个的意思和上面的一样,新标准出的
2.auto:C++11引入,auto是让编译器通过初始值来推算变量的类型,记住,auto定义的变量一定要有初始值。
要点1:因为一条声明语句只能有一个基本类型,所以这个语句的所有变量的出事基本数据类型都必须一样。这句话的
意思就是,我们可能会出现,auto a1=0,a2=6; 的情况,既然auto是根据后面的表达式来推算类型,我们就不能矛盾,不能
说,这是int,这是double,那么auto就会不知道选择哪个,举个错误例子:auto sz=0,pi=3.14;
要点2:说完基础的东西,肯定会有引用,指针,还有会有const,学的越多,累加的一起的东西越多,这个时候更不应该弄混。
所以用例子结合我觉得印象最深,例子1:
int i=0,&r=i;auto a=r;//r是一个引用,与i绑定,那么auto的类型就不是引用,而是int
要点3:(最重要)auto会忽略掉顶层const,链接:点击打开链接,而会保留底层const,依然举个例子:
const int ci = i,&cr=ci;auto b =ci ;//const int ci是顶层const,忽略之后就只是int,所以b的类型为intauto c = cr;//结合要点2可以知道,cr绑定ci,和尚一行代码结果一样auto d = &i;//这个和要点2的例子结合,i是个int,那么&int就是i的地址,所以d的类型就是int*auto e = &ci;指向一个常量的指针。
要点4:(要点3的补充)4-1:如果我们要实现auto加上顶层,那么就在前面加上const,const auto f=ci;
4-2:auto的引用,设置一个类型为auto的引用,初始值中的顶层常量属性会保留。例子:
auto &g=ci;//g为一个对常量的引用auto &h=42;//错误,不能为非常量引用绑定字面值const auto &j=42;//正确,对上个错误实例的纠正auto k=ci,&l=i;//k为int,l为int&auto &m=ci,*p=&ci;//m为对常量的引用,p为指向整形常量的指针auto &n=i,*p2=&ci;//错误,违反要点1的问题
要点1:先说说用法:decltype(f()) sum =x;sum的类型跟随,f()的返回类型。要记住,decltype仅仅只是获取类型,编译器并不会实际调用这个函数。
要点2:与auto的要点2不同,decltype返回变量的类型,例如:
const int ci = 0,&cj=ci;decltype(ci) x = 0; //x的类型,直接与ci的类型相同,不会忽略顶层,也包括引用,这个x为const int
decltype(cj) y = x;//y的引用保留,则为 const int&,必须初始化decltype(ci) z;//违反上一行代码,错误。
要点3:如果没有要点3的话,那么decltype无法像auto那样,获取引用的对象的类型,所以decltype与引用的情况下如何获得引用对象的类型,
并且解引用在decltype的类型怎么办。
例子:
int i = 42,*p= &i,&r=i;decltype(r+0) b;这里的b的类型则就是r所绑定的对象,为int而不是int&,做法:就是让引用r作为表达式的一部分,就像r+0.decltype(*p) c;//此处为解引用,那么decltype出来的就是引用,int&,因此需要初始化,这里是错误的。
要点4:(最重要)decltype使用的是一个不加括号的变量,则得到的结果就是该变量的类型,如果在变量上加上一层或多层括号,编译器则会把
它当成一个表达式,书本上有个warning,告诉我,双括号的结果永远是引用,例如decltype((variable))。如果是decltype(varriable)除非它本身是引用
才是引用。
- 处理类型(auto,decltype)----C++初学之路
- C++primer---constexpr、类型别名、auto、decltype
- c++(15)处理类型--decltype类型指示符
- 2.5类型别名,auto, decltype
- C++Primer学习之三auto和decltype
- c++(14)处理类型--auto类型说明符
- c++ 学习之路 第六天 auto decltype
- c++11之auto自动类型推断和decltype类型获取
- 类型推导之decltype
- C语言11中的auto和decltype
- C++11新特性:类型别名,auto类型,decltype类型
- 类型别名+auto类型说明符+decltype类型说明符
- 类型别名、auto类型说明符和decltype类型说明符初探
- 类型别名,auto类型说明符,decltype类型指示符
- C++ 0x 之 decltype 和 auto
- C++11之auto、decltype关键字
- C++之decltype和auto的用法
- C++11新特性之auto&decltype
- Android 控制状态栏和导航栏
- 希尔排序
- 二叉树中两个节点的最低公共父节点
- C语言实现学生成绩管理系统
- Egret笔记
- 处理类型(auto,decltype)----C++初学之路
- 杭电acm2036:凹凸多边形面积
- web应用实现filter
- Django | requirement.txt 生成
- WUST OJ:2058: 划水的魅力(spfa)
- 欢迎使用CSDN-markdown编辑器
- celery初级教程(四)
- Cocos2dx锚点
- 金融系列-清结算在支付场景中如何应用