C++基础系列主要罗列C++语言的一些基础知识,供基础不牢、记忆模糊和概念混淆时快速查询所用,该系列的章节按照C++ Primer中文版第四版进行整理。
(1)基本内置类型
C++中基本的内置类型包含整型和浮点类型两种。
整型:整数、字符和布尔值,其中整数类型中short, int, long占用的存储空间分别为半个机器字长、一个机器字长、一个或两个机器字长,32位机中int和long类型通常都是一个机器字长;字符有char和wchar_t两种,char类型通常是单个机器字节(8位),wchar_t是宽字符型,通常占用的最小空间为16位,用于扩展字符集,如汉字或日语,这些字符集中的一些字符不能用单个char表示;bool类型表示真值true和false,可以将算术类型的任何值赋给bool对象,0值算术类型表示false,任何非0表示true。
浮点类型:float, double和long double分别表示单精度浮点数、双精度浮点数和扩展精度浮点数,一般float类型用一个字(32位)表示,double类型用两个字(64位)表示,long double类型用三个或四个字表示。
将10种基本内置类型罗列如下:
类型 | 含义 | 最小存储空间 | |
整型 | bool | 布尔型 | |
char | 字符型 | 8 | |
wchar_t |
宽字符型 |
16 |
|
short | 短整型 | 16 | |
int | 整型 | 32 | |
long | 长整型 | 32或64 | |
浮点类型 | float | 单精度浮点类型 | 32 |
double | 双精度浮点类型 | 64 | |
long double | 扩展精度浮点类型 | 96或128 |
(2)变量初始化规则
内置类型变量的初始化:内置类型变量是否自动初始化取决于变量定义的位置,全局变量都初始化为0,局部变量不进行自动初始化,此时变量除用作赋值操作符的左值外的用途都是未定义的,会导致程序运行时崩溃;
类类型变量的初始化:类类型的变量必须初始化,初始化方式可以是显示的调用构造函数或隐式的调用默认构造函数。
(3)声明和定义
定义:定义用于为变量分配存储空间,还可以为变量指定初始值,在一个程序中,变量有且仅有一个定义;
声明:声明用于向程序表明变量的类型和名字,定义也是声明;可以通过关键字extern声明而不定义变量,它也不分配存储空间,它只是说明变量定义在程序的其他地方;程序中变量可以声明多次,但只能定义一次。
只有当声明也是定义时,声明才可以有初始化式,因为初始化式必须要有存储空间,而只有定义才分配存储空间,因此下面的语句即使有extern关键字也仍是定义:
extern double pi = 3.14;
此后再次定义pi就是错误的:
double pi;//error!! redefinition! extern double pi = 3.1416;//error!! redefinition!
(4)const对象默认为文件的局部变量
在全局作用域中的非const变量,只要做了合适的声明,在整个程序中都可以访问;但是在全局作用域中声明的const对象则是定义该对象的文件的局部变量,此变量只存在于当前文件中,不能被其他文件访问,此时可以通过在定义const变量时就将其指定为extern来使整个程序都可以访问const对象。示例如下:
1 //non-const 2 int counter; //definition in file1.cpp 3 extern int counter; //declare in file2.cpp 4 5 //const 6 extern const int MaxLen = 100;//definition in file1.cpp 7 extern const int MaxLen;//declare in file2.cpp
(5)引用
引用就是对象的另一个名字,不能定义引用类型的引用,非const引用必须用与该引用同类型的对象初始化,初始化是指明引用指向哪个对象的惟一方法。
int ival = 1024; int &refVal = ival; //ok int &refVal2; //error:a reference must be initialized int &refVal3 = 10; //error:initializer must be an object
对const对象的引用必须使用const引用,但是const引用可以初始化为不同类型的对象或右值,如下:
1 const int val = 1024; 2 const int &refVal = val;//ok 3 int &refVal = val;//error 4 5 6 //the below is all ok 7 int i = 42; 8 const int &r = 42; 9 const int &r2 = r + i; 10 11 double val = 3.14; 12 const int &ri = val;
(6)枚举
枚举定义如下所示:
enum open_modes{ input, output, append };
默认,第一个枚举成员赋值为0,后面的枚举成员依次递增。枚举成员是常量,初始化枚举成员的值必须是常量表达式。