面向对象编程OOP的本质是设计并扩展本身的数据类型。编程
内置的C++数据类型分为两组:基本类型和符合类型,其中基本类型仅仅包括整数与浮点数。数据结构
1. 要把信息存储在计算机中,程序必须记录3个基本属性:信息存储在哪,要存什么值,存储何种类型的信息编码
2. C++命名规则:spa
(1) 名称中只能使用字母、下划线、数字,且不能以数字开头,不能使用关键字作名称,区分大小写。设计
(2) 以两个下划线或下划线和大写字母打头的名称被保留给编译器及其使用的资源使用,以一个下划线打头的名称用做全局标识符。指针
(3) C++对于名称长度没有限制,但某些平台有长度限制。对象
(4) 多个单词组成组成一个名称,一般的作法是使用下划线将单词隔开,或者从从第二个单词开始将每一个单词的首字母大写。ci
(5) 描述变量类型或内容的前缀:n表示整型,str或sz表示以空字符结束的字符串,b表示布尔值,p表示指针,c表示单个字符。资源
3. 头文件climits(或limits.h)定义了符号常量来表示类型限制的信息。作用域
符号常量 |
表示 |
CHAR_MIN |
char的最小值 |
SCHAR_MAX |
signed char 最大值 |
SCHAR_MIN |
signed char 最小值 |
UCHAR_MAX |
unsigned char 最大值 |
SHRT_MAX |
short 最大值 |
SHRT_MIN |
short 最小值 |
USHRT_MAX |
unsigned short 最大值 |
INT_MAX |
int 最大值 |
INT_MIN |
int 最小值 |
UINT_MAX |
unsigned int 最大值 |
UINT_MIN |
unsigned int 最小值 |
LONG_MAX |
long最大值 |
LONG_MIN |
long最小值 |
ULONG_MAX |
unsigned long 最大值 |
FLT_MANT_DIG |
float 类型的尾数 |
FLT_DIG |
float 类型的最少有效数字位数 |
FLT_MIN_10_EXP |
带有所有有效数的float类型的负指数的最小值(以10为底) |
FLT_MAX_10_EXP |
float类型的正指数的最大值(以10为底) |
FLT_MIN |
保留所有精度的float类型正数最小值 |
FLT_MAX |
float类型正数最大值 |
4. 对类型名使用sizeof运算符时,应将名称放在括号中,但对变量名使用该运算符时,括号是可选的。
5. C++11的初始化方式:将大括号用于变量初始化,如int em={3};等号也能够省略,如int em{3};大括号内能够不包含任何东西,这将使用默认值,如int em{}和int em{0}等价,这也有助于更好的防范类型转换错误。
6. 整型字面值:
(1) 若是第一位为1-9,则为十进制
(2) 若是第一位为0,第二位为1-7,则为八进制
(3) 若是前两位为0x或0X,则为十六进制
cout默认格式为十进制,如要显示八进制和十六进制,则需使用cout<<hex和cout<<oct
7. 如何肯定常量的类型:
(1) 除非有理由存储为其余类型,不然存储为int类型
(2) 对于十进制不带后缀的整数,将使用下面几种类型中可以存储该数的最小类型来表示:int,long或long long
(3) 对于八进制、十六进制不带后缀的整数,将使用如下几种类型中可以存储该数的最小类型来表示:int,unsigned int,long,unsigned long,long long,unsigned long long
8. C++转义序列编码
字符名称 |
ASCII符号 |
C++代码 |
十进制ASCII码 |
十六进制ASCII码 |
换行符 |
NL(LF) |
\n |
10 |
0xA |
水平制表符 |
HT |
\t |
9 |
0x9 |
垂直制表符 |
VT |
\v |
11 |
0xB |
退格 |
BS |
\b |
8 |
0x8 |
回车 |
CR |
\r |
13 |
0xD |
振铃 |
BEL |
\a |
7 |
0x7 |
反斜杠 |
\ |
\\ |
92 |
0x5c |
问号 |
? |
\? |
63 |
0x3F |
单引号 |
‘ |
\’ |
39 |
0x27 |
双引号 |
“ |
\” |
34 |
0x22 |
在能够使用数字转义序列和符号转义序列时,应使用符号转义序列(如\0x8或\b),数字表示与特定的编码方式有关,而符号表示能够适用于任何编码方式,可读性也更强。
9. 通用字符名(universal character name)是表示特殊字符的一种机制,以\u或\U打头。\u后面是8个十六进制位,\U后面是16个十六进制位。这些位表示的是字符的ISO 10646码点(字符的编号)。在源代码中,可以使用适用于全部系统的通用编码名,而编译器根据当前系统使用合适的内部编码来表示它。
10. char是否有符号由C++实现决定。若是说char有某种特定行为对于开发者来讲很是重要,能够显式的将类型设置为signed char和unsigned char
11. wchar_t(宽字符类型)用于表示扩展字符集。它是一种整数类型,这种类型与另外一种整型的长度和符号属性相同,对于底层类型的选择取决于实现。wcin和wcout可用于处理wchar_t流。另外,可经过加上前缀L来指示宽字符常量和宽字符字符串。
12. C++11新增char16_t和char32_t,都无符号,前者长16位,使用前缀u表示常量,如u’c’,与\u00F6的通用字符名匹配,后者长32位,使用前缀U表示常量,如U’c’,与\U000022B的通用字符名匹配。它们的底层类型都是一种内置的整型,但底层类型可随系统变化。
13. 使用const限定符来处理符号常量。若是在声明常量时没有提供值,则该常量的值是不肯定的,且没法修改。可以使用:首字母大写、整个名称大写、以字母k打头提醒使用者这是一个常量。const与define相较的好处是:类型明确、限定在做用域中、可用于更复杂的数据结构。
14. C++有三种浮点数类型:float,double,long double,其中float至少32位,通常为32位,double至少48位,通常为64位,long double 至少和double同样多,通常为80,96,128位,这三种类型的指数范围至少-37到37,可从头文件cfloat或float.h找到系统的限制。
15. 求模运算的两个操做数必须是整型,若是其中一个是负数,则结果的符号知足(a/b)*b+a%b=a的运算规则。
16. 当多个运算符应用于同一个操做数时,应用C++优先级决定优先应用哪一个操做符。当两个运算符优先级相同时,C++将看操做数的结合性。
17. C++11使用{ }进行初始化,即列表初始化,这种方法仅当目标变量可以正确存储赋值给它的值时才能编译经过。
18. 在计算表达式时,C++将bool,char,unsigned char,signed char,short类型自动转换为int类型,即整型提高。
19. 将不一样类型进行算术运算时,将较小的类型转换为较大的类型。编译器经过校验表来肯定在算术表达式中的转换:
(1) 若是有一个操做数的类型是long double,则另外一个操做数转换为long double。
(2) 不然,若是有一个操做数的类型是double,则另外一个操做数转换为double。
(3) 不然,若是有一个操做数的类型是float,则另外一个操做数转换为float。
(4) 不然,说明操做数都是整型,进行整型提高。在这种状况下,若是两个操做数都是无符号或是有符号的,且其中一个操做数的级别比另外一个低,则自动转换为级别较高的类型。
若是一个操做数是有符号的,另外一个操做数是无符号的,且无符号操做数的级别比有符号操做数的级别高,则将有符号操做数转换为无符号操做数所属类型。不然,若是有符号类型可表示无符号类型全部取值,则将无符号操做数转换为有符号操做数所属类型。不然,将两个操做数都转换为有符号类型的无符号版本。
20. C++11从新定义了关键字auto,使其可以根据初始值的类型判断变量类型。