C++ Primer Plus(三)——处理数据

你。 提交于 2019-12-07 13:41:46

面向对象编程OOP的本质是设计并扩展自己的数据类型。

内置的C++数据类型分为两组:基本类型和符合类型,其中基本类型仅仅包括整数与浮点数。

1. 要把信息存储在计算机中,程序必须记录3个基本属性:信息存储在哪,要存什么值,存储何种类型的信息

2. C++命名规则:

         (1) 名称中只能使用字母、下划线、数字,且不能以数字开头,不能使用关键字做名称,区分大小写。

         (2) 以两个下划线或下划线和大写字母打头的名称被保留给编译器及其使用的资源使用,以一个下划线打头的名称用作全局标识符。

         (3) C++对于名称长度没有限制,但某些平台有长度限制。

         (4) 多个单词组成组成一个名称,通常的做法是使用下划线将单词隔开,或者从从第二个单词开始将每个单词的首字母大写。

         (5) 描述变量类型或内容的前缀:n表示整型,strsz表示以空字符结束的字符串,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) 如果前两位为0x0X,则为十六进制

cout默认格式为十进制,如要显示八进制和十六进制,则需使用cout<<hexcout<<oct

7. 如何确定常量的类型:

         (1) 除非有理由存储为其他类型,否则存储为int类型

         (2) 对于十进制不带后缀的整数,将使用下面几种类型中能够存储该数的最小类型来表示:intlonglong long

         (3) 对于八进制、十六进制不带后缀的整数,将使用以下几种类型中能够存储该数的最小类型来表示:intunsigned intlongunsigned longlong longunsigned 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 charunsigned char

11. wchar_t(宽字符类型)用于表示扩展字符集。它是一种整数类型,这种类型与另一种整型的长度和符号属性相同,对于底层类型的选择取决于实现。wcinwcout可用于处理wchar_t流。另外,可通过加上前缀L来指示宽字符常量和宽字符字符串。

12. C++11新增char16_tchar32_t,都无符号,前者长16位,使用前缀u表示常量,如u’c’,与\u00F6的通用字符名匹配,后者长32位,使用前缀U表示常量,如U’c’,与\U000022B的通用字符名匹配。它们的底层类型都是一种内置的整型,但底层类型可随系统变化。

13. 使用const限定符来处理符号常量。如果在声明常量时没有提供值,则该常量的值是不确定的,且无法修改。可使用:首字母大写、整个名称大写、以字母k打头提醒使用者这是一个常量。constdefine相较的好处是:类型明确、限定在作用域中、可用于更复杂的数据结构。

14. C++有三种浮点数类型:floatdoublelong double,其中float至少32位,一般为32位,double至少48位,一般为64位,long double 至少和double一样多,一般为8096128位,这三种类型的指数范围至少-3737,可从头文件cfloatfloat.h找到系统的限制。

15. 求模运算的两个操作数必须是整型,如果其中一个是负数,则结果的符号满足(a/b)*b+a%b=a的运算规则。

16. 当多个运算符应用于同一个操作数时,应用C++优先级决定优先应用哪个操作符。当两个运算符优先级相同时,C++将看操作数的结合性。

17. C++11使用{ }进行初始化,即列表初始化,这种方法仅当目标变量能够正确存储赋值给它的值时才能编译通过。

18. 在计算表达式时,C++boolcharunsigned charsigned charshort类型自动转换为int类型,即整型提升。

19. 将不同类型进行算术运算时,将较小的类型转换为较大的类型。编译器通过校验表来确定在算术表达式中的转换:

         (1) 如果有一个操作数的类型是long double,则另一个操作数转换为long double

         (2) 否则,如果有一个操作数的类型是double,则另一个操作数转换为double

         (3) 否则,如果有一个操作数的类型是float,则另一个操作数转换为float

         (4) 否则,说明操作数都是整型,进行整型提升。在这种情况下,如果两个操作数都是无符号或是有符号的,且其中一个操作数的级别比另一个低,则自动转换为级别较高的类型。

如果一个操作数是有符号的,另一个操作数是无符号的,且无符号操作数的级别比有符号操作数的级别高,则将有符号操作数转换为无符号操作数所属类型。否则,如果有符号类型可表示无符号类型所有取值,则将无符号操作数转换为有符号操作数所属类型。否则,将两个操作数都转换为有符号类型的无符号版本。

20. C++11重新定义了关键字auto,使其能够根据初始值的类型判断变量类型。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!