C++定义了一套包括算术类型和空类型在内的基本数据类型。
其中算术类型包含了字符,整型数,布尔值和浮点数。空类型不对应具体的值(具体应用不知)
内置类型的机器实现
计算机以比特序列存储数据,每个比特非0即1。
大多数计算机将内存中的每个字节与一个地址关联起来,例如:
736424 ----------0 0 1 1 1 0 1 1
736425 ----------0 0 0 1 1 0 1 1
736426 ----------0 1 1 1 0 0 0 1
736427 ----------0 1 1 0 0 1 0 0
地址 8比特内容
为了赋予内存中某个地址明确的含义,必须首先知道存储在该地址的数据的类型。类型决定了数据所占的比特数以及该如何解释这些比特内容。
同样的比特序列不同的数据类型表示不同的值!
如何选择类型?
为了使程序更准确,更快运行遵循以下准则:
当明确知晓数值不可能为负的时,选用无符号类型。
使用 int 执行整数运算。在实际应用中, short 常常显得太小, long 一般和 int 有一样的尺寸。如果数值超过了 int 的表示范围,选用 long long。
在算术表达式 中不要使用 char 或 bool,只有在存放字符或布尔值时才使用它们。因为类型 char 在一些机器上是有符号的,而在另一些机器上又是无符号的,
所以如果使用 char 进行运算特别容易出问题。如果你需要使用一个不大的证书,那么明确指定它的类型是 signed char 或者 unsigned char。
执行浮点数运算选用 double ,这是因为 float 通常精度不够而且双精度浮点数甚至比单精度还快。
long double 提供的精度一般情况下是没有必要的,况且它带来的运行是消耗也不容忽视。
变量的初始化:
变量在第一次使用的时候再定义它。
在C++语言中,初始化和赋值是两个完全不同的操作。
初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是吧对象的当前值擦除,而以一个新值来替代。
int units_sold = 0;
int units_sold = {0};
int units_sold{0}; //C++11 standard 列表初始化
int units_sold(0);
Ps:
当用于内置类型的变量时,这种初始化形式有一个重要的特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器会报错:
long double ld = 3.1415926536;
int a{ld}, b = {ld}; //错误:转换未执行,因为存在丢失信息的危险
int c(ld), d =ld; //正确L转换执行,且确实丢失了部分值
默认初始化:、
如果是内置类型的变量未被显式初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0。