2.5:处理类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.5:处理类型相关的知识,希望对你有一定的参考价值。
1.类型别名
关键字typedef
typedef int myInt; //myInt为int同义词
可以用myInt来声明对象
myInt a = 0; //等于int a = 0
在函数指针中typedef用处更大,以后细说
---------------------------------------------------------------------------------------------------------------
C++11新标准下,可以用using
using myInt = int; //和typedef效果一样
==============================分割线==============================
auto类型说明符
由C++11新标准引入,可以让编译器通过初始值在推算变量的类型,所以auto定义的变量必须有初始值
auto num = num1 + num2; //num可以初始化为num1和num2相加的结果
auto也可以在一条语句中声明多个变量,该语句中所有变量的类型必须一样
auto i = 0, *p = &i; //正确
auto j = 0, pi = 3.14; //错误,类型不一致
编译器推断出的auto类型有时候和初始值的类型并不完全一样,编译器会适当地改变结果类型使其符合初始化规则
1.当引用被用作初始值时,真正参与初始化的其实是引用对象的值,此时编译器以引用对象的类型作为auto的类型
2.auto会忽略掉顶层const,底层const会被保留下来
const int i = 0;
auto a = i; //此时a为int不为const int,可以改变a的值
==============================分割线==============================
decltype类型指示符,
从表达式的类型推断出要定义的变量的类型,但是不用该表达式的值初始化变量,作用是选择并返回操作数的数据类型
const int m = 10, &n = m;
decltype(num) a = 0; //num是const int类型
decltype(n) b = a; //b的类型是const int&
decltype(n) c; //错误,引用必须初始化
如果使用的表达式不是一个变量,则decltype返回表达式结果对应的类型
如果表达式的内容是解引用操作,则decltype将得到引用类型
int i= 42, *p = &i, &r = i;
decltype(r + 0) b; //正确,加法结果为int,b是个为初始化的int
decltype(*p) c; //错误,c是int&,必须初始化
decltype的表达式如果加了括号,结果为引用
decltype((i)) d; //错误,id是int&,引用必须初始化
decltype(i) e; //正确
以上是关于2.5:处理类型的主要内容,如果未能解决你的问题,请参考以下文章