C++ Primer 第四版读书笔记(一)之变量和基本类型
C++语言定义了几种基本类型:字符型、整形、浮点型等。
1、基本内置类型
C++定义了一组表示整数、浮点数、单个字符和布尔值的算术类型,另外还定义了一种称为void的特殊类型。
类型 | 含义 | 最小存储空间 |
---|---|---|
bool | 布尔型 | - |
char | 字符型 | 8位 |
wchar_t | 宽字符型 | 16位 |
short | 短整型 | 16位 |
int | 整形 | 16位 |
long | 长整形 | 32位 |
float | 单精度浮点型 | 6位有效数字 |
double | 双精度浮点型 | 10位有效数字 |
long double | 扩展精度浮点型 | 10位有效数字 |
1.1 整型
表示整数、字符和布尔值的算术类型合称为整型。
一个字(word)为4个字节,32位。
2.1 变量
变量提供了程序可以操作的有名字的存储区。C++中的每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在该变量上的操作集。
(1)、左值:左值可以出现在赋值语句的左边或右边。
(2)、右值:右值只能出现在赋值语句的右边,不能出现在赋值语句的左边。
变量是左值,因此可以出现在赋值语句的左边。数字字面值是右值,因此不能被赋值。
3.1 变量名
变量名,即变量的标识符,可以由字母、数字和下划线组成。变量名必须以字母或下划线开头,并且区分大小写字母:C++中的标识符都是大小写敏感的。
4.1 声明和定义
为了让多个文件访问相同的变量,C++区分了声明和定义。
变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。
声明:用于向程序表明变量的类型和名字。
定义也是声明:当定义变量时我们我们声明了它的类型和名字。可以通过使用extern关键字声明变量名而不定义它。
5.1 const限定符
1、定义const对象
定义一个变量代表某一常数的方法依然有一个严重的问题。即bufsize是可以被修改的。bufsize可能被有意或无意的修改。const限定符提供了一个解决办法,它把一个对象转换成一个常量。
2、const对象默认为文件的局部变量
除非特殊说明,在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。
6.1 引用
引用就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。
引用是一种复合类型,通过在变量名前添加“&”符号来定义。复合类型是指用其他类型定义的类型。在引用的情况下,每一种引用类型都“关联到”某一其他类型。不能定义引用类型的引用,但可以定义任何其他类型的引用。
1、引用是别名
因为引用只是它绑定的对象的另一名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。
当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。不能将引用绑定到另一个对象。
必须在定义引用时进行初始化,初始化是指明引用指向哪个对象的唯一方法。
2、定义多个引用
可以在一个类型定义行中定义多个引用。必须在每个引用标识符前添加“&”符号。
3、const引用
const引用是指向const对象的引用
const引用是指向const的引用:严格来说,“const引用”的意思是“指向const对象的引用”。类似地,程序员使用术语“非const引用”表示指向非const类型的引用。
const引用可以初始化为不同类型的对象或者初始化为右值。
7.1 typedef 名字
typedef可以用来定义类型的同义词:
typedef名字可以用作类型说明符。
typedef定义以关键字typedef开始,后面是数据类型和标识符。标识符或类型名并没有引入新的类型,而只是现有数据类型的同义词。typedef名字可出现在程序中类型名可出现的任何位置。
typedef通常被用于以下三种目的:
1、为了隐藏特定类型的实现,强调使用类型的目的。
2、简化复杂的类型定义,使其更易理解。
3、允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
8.1 枚举
枚举提供了一种代替的方法,不但定义了整数常量集,而且还把他们聚集成组。
1、定义和初始化枚举
枚举的定义包括关键字enum,其后是一个可选的枚举类型名,和一个用花括号括起来、用逗号分开的枚举成员列表。
默认地,第一个枚举成员赋值为0,后面的每个枚举成员赋的值比前面的大1。
2、枚举成员是常量
可以为一个或多个枚举成员提供初始值,用来初始化枚举成员的值必须是一个常量表达式。常量表达式是在编译器在编译时就能够计算出结果的整形表达式。整型字面值常量是常量表达式,正如一个通过常量表达式自我初始化的const对象也是常量表达式一样。
3、每个enum都定义一种唯一的类型
每个enum都定义了一种新的类型。和其他类型一样,可以定义和初始化points类型的对象,也可以以不同的方式使用这些对象。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行。