1、基本内置类型
整型:整数、字符、布尔值
浮点型:浮点数
2、C++的内置类型与其在计算机的存储器中的表示方法密切相关。让存储具有结构的最基本方法是用块(Chunk)处理存储。块的大小因机器不同而不同,但是通常将8位的块作为一个字节,32位或4个字节作为一个“字”(word)。
3、带符号类型和无符号类型(整型独有)
整型 int, short, long 都默认为带符号型,而无符号必须加上说明符 unsigned。
和其他整型不同,char有三种不同的类型:普通char, unsigned char, signed char。虽然char有三种不同的类型,但只有两种表示方式。可以使用unsigned char 或 signed char表示char类型。而使用哪种char表示方式由编译器而定。
C++中, 把负值赋给unsigned对象是完全合法的,其结果是该负值对该类型的取值个数求模后的值。例如,如果把-1赋给8位的unsigned char, 那么结果是255,因为255是-1对256求模后的值。
4、对于实际的程序来说,float类型精度通常是不够,float型只能保证6位有效数字,而double 型至少可以保证10位有效数字。
5、内置算数类型使用建议
1)实际上许多人用整型进行计数,而其中使用unsigned类型比较明智,可以避免值越界导致结果为负数的可能性。
2)当执行整型算数类型时,很少使用short类型,避免隐含赋值越界错误。
3)虽然char是整型,但通常用来存储字符而不用于计算。
4)大多数机器上,使用int类型进行整型计算不易出错。
5)决定使用浮点型时:使用double类型基本不会有错,且计算代价不一定比单精度高。
6、在字符串字面值连接过程中,字符串的类型必须是相同的。
例如:普通字符串 "AA", 宽字符串 L"BB"
Cout<<"AA"L"BB"<<endl; // 错误,连接不同类型的行为标准没有定义。
7、多字面值。
在一行的末尾加一反斜线符号可以将此行与下一行当做同一行处理。
注意:反斜线符号必须是该行的尾符号,即不允许其后面有注释或空格。
8、C++是一门静态类型语言,在编译时会做类型检查。静态类型检查是的编译器必须能识别程序中得每个实体的类型。因此,程序中使用变量前必须定义变量的类型。
9、变量有左值和右值两种表现形式。变量名又数字、字母和下划线组成,必须以字母或下划线开头。
10、变量初始化方式
1)复制初始化(copy-initialization): int ival=1024;
2)直接初始化(direct-initialization): int ival(1024);
直接初始化语法更灵活效率更高,详见13章。
11、内置类型在函数体外定义的变量都初始化成0,而函数体里定义的内置类型变量不进行自动初始化。
12、变量在一个程序中有且仅有一个定义,但可以有多个声明。声明用关键字extern说明。
extern 声明不是定义,也不分配存储空间。事实上,它只说明变量定义在程序的其他地方。但如果声明有初始化,那么它可被当做是定义,即使声明标记为extern。
13、const 限定符
1)const将一个变量对象转换成一个常量,因为常量在定以后不能被修改,所以再定义时必须初始化。
2)非const对象默认为extern,即在一个文件全局作用域定义后可以被其他文件访问。而const对象默认为文件的局部变量,要是其能够在其他的文件中访问,必须显示地在定义时指定它为extern。
14、引用&
1)引用必须用与该引用同类型的对象初始化。
2)当引用初始化后,只要该引用存在,它就保持绑定到初始化时指向的对象。
3)将非const引用绑定到const对象是不合法的。
4)const 引用 可以初始化为不同类型的对象或者初始化为右值。
例如:
double val = 3.14; const int &a = val;
const int &r = 42;
这两种情况在非const 引用都是非法的。
15、typedef的使用目的:
1)为了隐藏特定类型的实现,强调使用类型的目的。
2)简化复杂的类型定义,使其更容易理解。
3)允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
16、不能改变枚举成员的值。枚举成员本身就是一个常量表达式,所以也可用于需要常量表达式的任何地方。枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行。
17、class与struct的区别:
用class与struct关键字定义类的唯一差别在于默认访问级别:默认情况下,struct的成员为public,class的成员为private。