C++ Primer Plus(四)——复合类型

余生颓废 提交于 2019-12-02 20:15:29
  1. 只能在定义数组时才能初始化,不能将一个数组赋值给另一个数组,但可以使用下标分别赋值给数组元素,但可以将一个string对象赋值给另一个string对象

  2. 如果只对数组的一部分初始化,其他元素自动设置为0

  3. C++11可在初始化的大括号里不包含任何东西,这将把所有元素设置为0

  4. C++11在数组列表初始化时,禁止缩窄转换

  5. C-风格字符串以\0结尾,不是\0结尾的字符数组不是字符串

  6. 任何两个由空白(空格,制表符,换行符)分隔的字符串常量都将自己拼成一个

  7. sizeof运算符指出整个数组的长度,而strlen()指出存储在数组中的字符串的长度

  8. cin使用空白(空格,制表符,换行符)确定字符串的结束位置,面向单词

  9. cin的get( )函数和getline( )函数,面向行:

    getline( )函数丢弃换行符,在读取指定数目-1的字符或遇到换行符时停止读取

    get( )函数的一种变体和getline函数参数相同,但保留换行符,在再次读取字符时要先使用无参数的get()函数读取换行符后才能正确读取字符,再使用clear( )函数来恢复输入

  10. 可以使用C-风格字符串来初始化string对象,使用cin来将键盘输入存储到string对象中,使用cout来显示string对象,使用数组表示法来访问存储在string对象中的字符

  11. C++将"(和)"作为界定符,使用前缀R来标识原始字符串(不转义),可在原始界定符间添加除空格,左括号,右括号,斜杠和控制字符外的其他字符形成自定义字符。

  12. C++允许在声明结构体变量时省略关键字struct,并使用成员运算符 . 来访问各个成员

  13. C++不提倡使用外部变量,但提倡使用外部结构声明

  14. 结构体初始化使用逗号分隔列表,并将这些值用花括号括起来

  15. C++允许指定占用特定位数的结构成员,该结构成员的字段类型为整型或枚举,接下来是冒号,冒号后面一个数字,这样就能创建于某个硬件设备上的寄存器对应的数据结构,但位字段通常用于低级编程中。

  16. 共同体能够存储不同的数据类型,但只能同时存储其中的一种类型,当数据项使用两种或更多种数据类型时,可节省空间, 也被常用于操作系统数据结构或硬件数据结构。

  17. C++enum提供了另一种创建符号常量的形式。在不进行强制转换的情况下,只能在定义枚举时使用的枚举赋值给这种枚举的变量;在进行算术运算时,枚举将自动转为int,其结果类型是int,必须经过强制转换才能复制给枚举变量

  18. 每个枚举都有取值范围,通过强制转换,可以将取值范围中的任何整型数值福会给枚举变量,即使这个值不是枚举值、枚举取值范围的定义是计算将枚举最大值包含在内的2的n次方,例如最大值为108,则其最大值的上限为128,其最小值为-6,则其最小值的下限为-8,取值范围为-8~128

  19. 取得常规变量的地址只需使用地址运算符&即可

  20. 面向对象编程和传统的过程性编程的区别在于,OOP强调的是运行阶段进行决策。

  21. 在使用常规变量时,值是指定的量,而地址是派生量;指针则恰恰相反,指针名得到的是地址,值是派生的量。*是间接值或解除引用运算符,将其应用于指针可以得到该地址处的值

  22. 在C++中,int*是一个复合类型,是指向int的指针,对于每个指针变量名都需要使用一个*。

  23. 在声明的语句中进行初始化,被初始化的是指针,而不是它指向的值。

  24. 在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。在指针应用解除引用符之前,将指针初始化为一个确定的适当的地址,是使用指针的金科玉律。

  25. 指针不是整型,不能简单地将整型赋给指针,应通过强制类型转换将数字转换为适当的地址

  26. 变量的值都存储在栈的内存区域中,new从堆或自由存储区的内存区域分配内存

  27. 使用delete释放内存,不会删除指针本身,不要释放已经释放的内存块,也不要释放变量声明所获得的内存

  28. 不要创建两个指向同一个内存块的指针,因为这将增加错误的删除同一个内存块两次的可能性

  29. 使用new和delete时,应遵循以下规则:

    1. 不要使用delete释放不是new分配的内存

    2. 不要使用delete释放同一个内存块两次

    3. 如果使用new[ ]为数组分配内存,则应使用delete[ ] 来释放

      如果使用new为一个实体分配内存,则应使用delete来释放

    4. 对于空指针应用delete是安全的

  30. C和C++内部都使用指针处理数组,数组和指针基本等价,区别是数组名的值是常量,不能修改,指针的值是变量,可以修改;对数组应用sizeof运算符得到的是数组的长度,而对指针应用则是指针的长度。

  31. 将指针变量加1时,其增加的值等于指向的类型占用的字节数

  32. 使用数组声明来创建数组时,将采用静态联编;当使用new[ ]运算符创建数组时,将采用动态联编。

  33. 使用方括号数组表示法等同于对指针解除引用

  34. 对于数组中的字符串、用引号括起来的字符串常量、指针描述的字符串常量,其处理方式都是传递他们的地址

  35. 不要使用字符串常量或未被初始化的指针来接收输入。

  36. C++有三种管理数据内存的方式:

    1. 自动存储->局部变量->栈

    2. 静态存储->在函数外声明的变量 或 静态存储->使用static关键字的变量

    3. 动态存储->new/delete声明的变量->堆

  37. vector使用new和delete来自动管理内存

  38. 在array对象初始化时,初始化元素个数的参数只能是常量。

  39. 数组和array类都存储在栈中,vector存储在堆中。

  40. C++不检查越界错误,中括号表示法和成员函数at( )的差别在于,at将在运行期间捕获非法索引,而程序将默认中断,但运行时间更长。   

  41. C++98新增的标准模板库STL提供了模板类vector,它是动态数组的替代品;

    C++11提供了模板类array,它是定长数组的替代品

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