「C++笔记」处理类型:别名与auto与decltype
类型别名
- 类型别名是一个等价于某种类型的名字
- 定义方式有传统的typedef和别名声明(using) 两种
- 定义的别名等价于对应类型(包括复合类型)
1
2
3
4typedef double dub; //dub是double的别名
using unint = unsigned int; //unint是unsigned int的别名
using pdub = double*; //pdub是double*别名
pdub ptr = nullptr; //等价于double* ptr = nullptr;
auto类型说明符
- auto会告诉编译器去分析表达式所属类型并赋予变量
- 用于定义时必须有初始值
- 声明多个变量时初始基本数据类型必须一致
- auto通常会忽略顶层const,保留底层const
1
2
3
4
5
6auto var = 42, *pvar = &var;
const int i = 42;
auto a = i; //a是一个整数
const auto b = i; //b为int常量
//对常量获取地址是一种底层const
auto c = &i; //c是一个指向int常量的指针
decltype类型指示符
- decltype用于选择并返回操作数的数据类型
- 编译器会分析表达式并返回它的类型,但不计算实际的值
- 如果表达式能做为左值,则返回引用类型
- 变量的类型会如实返回(包括引用和顶层const)
- 给变量名加上括号会让其被识别为表达式,这会返回引用类型
1
2
3
4decltype (ft()) var = x; //var的类型为函数ft()的返回值
const int a = 42, &r = a;
decltype (a) b = a; //b的类型为const int
decltype (r) c = b; //c的类型为const int& - 编译器会分析表达式并返回它的类型,但不计算实际的值
易错
using pint = int*的含义是pint是int*类型的别名,在使用它进行声明时const pint ptr = nullptr的含义是一个指向int类型的常量指针,而非const int *ptr = nullptr的一个指向int常量的指针
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ✨岚的小窝✨!
评论



