[C++ Primer] 变量和基本类型
变量
-
默认初始化
如果定义变量时没有指定初值,则变量默认初始化,此时变量被赋予“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。
内置类型:其默认值由定义的位置决定。定义于任何函数之外的变量被初始化为0。
绝大多数类都支持无须显示初始化而定义对象,这样的类提供一个合适的默认值,比如string类若没指定初值则生成空串。
const 限定符
- 顶层const:可以表示任意的对象是常量,对任何数据类型都适用;
底层const:与指针和引用等复合数据类型的基本类型部分有关。
int i = 0;
int *const p1 = &i; // 不能改变p1,顶层const
const int ci = 42; // 不能改变ci,顶层const
const int *p2 = &ci; // 允许改变p2,底层const
const int *const p3 = p2;//右边的const是顶层const,左边的是底层const
const int &r = ci; // 用于声明引用的const都是底层const
-
常量表达式:是指值不会改变并且在编译过程就能得到计算结果的表达式。
const int max_files = 20; // max_files是常量表达式 int i = 7; // i不是常量表达式,值会改变 const int sz = get_size(); // sz不是常量表达式,运行时才能得到sz具体值
处理类型
-
类型别名的两种定义方法:
-
关键字
typedef
typedef double wages; // wages是double的同义词 typedef wages base, *p; // base是double的同义词,p是double*的同义词
关键字
typedef
作为声明语句中的基本数据类型的一部分出现。 -
别名声明
using
using SI = Sales_item;
-
-
auto
类型说明符:让编译器替我们分析表达式所属的类型auto item = val1+val2; // item初始化为val1和val2相加的结果
-
decltype
类型指示符:选择并返回操作数的数据类型,编译器分析表达式并得到它的类型,却不实际计算表达式的值decltype(f()) sum = x; // sum的类型就是函数f的返回类型
decltype((variable))
(双层括号)的结果永远是引用,而decltype(variable)
结果只有当variable
本身就是一个引用时才是引用。