一、为什么设计数据类型?
数据类型决定了程序中数据和操作的意义。数据的意义:在不同的应用场景下,变量需要占用不同大小的内存空间,布局方式和该空间能储存的值的范围,这些不同由数据类型体现;操作的意义:两个整数相加和两个对象相加的算法是不一样的,这个不一样由数据类型体现。
二、C++输出没有占位符,用什么数据类型来解析?
unsigned u = 10;
int i = -42;
std::cout << i + i << endl; //输出 -84
std::cout << u + i << endl; //如果int占32位,输出4294967264
从上面的代码可以看出,cout解析一个变量时,按照该变量定义时的数据类型进行解析,比如变量i,按照int解析,如果想要按照别的数据类型进行解析,需要强制类型转换。
三、定义一个变量之后,发生了什么?
变量提供了一个可操作的存储空间。编译器根据变量的数据类型做了以下事情:分配内存空间的大小和位置,该空间能储存值的范围,变量能参与的运算。
四、变量初始化和赋值
初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把变量的当前值擦除,而以一个新值来替代。
列表初始化:
int units_sold = 0;
int units_sold = {0};
int units_sold{0};
int units_sold(0);
上面第三种,用花括号来初始化叫做列表初始化。
默认初始化: 默认值由变量类型和变量位置决定。
五、constexpr和常量表达式
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。C++11允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量。
六、auto类型说明符
auto指定一个变量的类型为编译器自动分析所得结果。
auto i = 0, *p = &i; //编译器自动推导auto为int