C++ Primer Plus(四)
完整阅读C++ Primer Plus
系统重新学习C++语言部分,记录重要但易被忽略的,关键但易被遗忘的。
友元、异常和其他
1、抛出异常类时,虽然catch的是一个引用,但是也会产生一次拷贝,因为当抛出异常的函数在栈解退的过程中会会调用异常类的析构函数,异常类将不复存在。
2、如果有一个异常类层次结构,应该这样排列catch块:将捕获位于层次结构最下面的异常类的catch语句放在最前面,将捕获基类异常的catch语句放在最后面。抛出异常的顺序要与catch块相反。
3、在catch语句中使用基类对象时,将捕获所有的派生类对象,但派生类特性将被剥去,因此将使用虚方法的基类版本。
4、 将dynamic_cast用于引用时,由于没有与空指针对应的引用值,因此无法使用特殊的引用值来表示失败,当请求不正确时,将引发bad_cast的异常。
5、reinterpret_cast运算符并不支持所有的类型转换,例如,可以将指针类型转换为足以存储指针的整数,但不能将指针转换为更小的整型或浮点型。另一个限制是,不能将函数指针和数据指针互相转换。
string类和标准模板库
6、使用new分配内存时,可以使用auto_ptr、unique_ptr、shared_ptr、但只有unique_ptr有使用new[]和delete[]的版本。
7、在unique_ptr为右值时,可以将其赋值给shared_ptr,模板shared_ptr包含一个显式构造函数,可以用于将右值unique_ptr转换为shared_ptr。
8、对于所有内置的算术运算符、关系运算符和逻辑运算符,STL都提供了等价的函数符(仿函数)。
9、valarray模板类重载了许多运算符,可以直接参与大多数数值运算;slice类可用作数组索引,它接受三个值初始值:起始索引、索引数、跨距。
valarry<double> arr();
arr[slice(,,)] = ;
slice(1,4,3)创建的对象表示选择4个索引,这可以将arr的第1、4、7、10个元素都设置为10。
10、迭代器类型
Input iterator(输入迭代器) | 读,不能写;只支持自增运算 |
Output iterator(输出迭代器) | 写,不能读;只支持自增运算 |
Forward iterator(前向迭代器) | 读和写;只支持自增运算 |
Bidirectional iterator(双向迭代器) | 读和写;支持自增和自减运算 |
Random access iterator(随机访问迭代器) | 读和写;支持完整的迭代器算术运算 |
输入、输出和文件
11、对于标准错误输出,是没有缓冲区的。
12、在使用cout时,可以使用成员函数width()设置下一次输出时的字段宽度,默认右对齐并以空格填充空白字段,当字段宽度不足时,C++不对截断输出宽度;使用成员函数fill()用来填充空白字段;使用成员函数precision()来设置浮点数输出精度;成员函数setf()与unsetf()提供了更丰富的输出格式设置方法,但使用标准控制符将更加简单。
13、对于cin的get()方法和getline()方法来说,如果没有读取到任何字符(getline()将换行符视为一个字符),则设置failbit;如果读取了最大数目的字符,但行中还有其他字符,getline()将设置failbit。
14、cin的peak()方法可以查看输入流中的下一个字符,gcount()方法可以返回最后一个非格式化抽取方法读取的字符数,putback()方法可以将字符插入到输入字符串中。
15、fstream类中的方法seekg()和seekp()分别将输入指针和输出指针移到指定的文件位置,事实上,由于fstream类使用缓冲区来存储中间数据,因此指针指向的是缓冲区中的位置,而不是实际的文件。
16、fstream类中的方法tellg()和tellp()方法分别返回输入流、输出流当前指针的位置,对于fstream对象,输入输出指针将一前一后地移动,因此它们的返回值相同。但对于使用istream对象来管理输入流,而使用ostream对象来管理同一个文件的输出流,则输入指针和输出指针将彼此独立的移动。
17、关于如何生成临时文件,使用tmpnam()可以生产TMP_NAM个不同的文件名,其中每个文件名包含的字符不超过L_tmpnam个。
18、C++库还提供了sstream族(包含ostringstream类和istringstream类),它们使用相同的接口提供程序和string对象之间的IO。
探讨C++新标准
19、新标准引入的移动语义,用来修饰六个特殊函数的default关键字,用来删除任意成员函数的delete关键字,以及使用类似初始化列表的方式在一个构造函数中使用另一个构造函数(被称为委托构造),以及使用using 类名::函数名,使基类所有的非特殊成员函数对派生类可以用(继承构造函数),以及显示声明重写(覆盖)某个虚函数的标识符override,以及禁止派生类覆盖特定的虚函数标识符final。
20、C++11引入lambda表达的主要目的是能够将类似于函数的表达式用作接受函数指针或函数符的函数的参数。
21、C++提供了多个包装器对象,用于给其他编程接口提供更一致或更合适的接口。C++11提供了包括模板bind(替代bind1st和bind2nd)、men_fn(将成员函数作为常规函数传递)和reference_wrapper(创建行为像引用但可被复制的对象)以及funtion(以统一的方式处理多种类似于函数的形式,使用模板时可减少可执行代码的规模)。
22、正确使用递归实现可变参数模板。
23、C++11增加了对并行编程的支持,以及相当多的新增库等。
附录
24、C++允许定义指向类成员(包括数据和函数)的指针,这种语法需要使用到成员解除引用运算符(* 、->*)。
25、C++11新增了alignof运算符,它接受一个类型作为参数,返回这个类型的对齐方式;noexcept关键字用于指出函数不会引发异常,它也可以用作运算符,判断表达式是否可能引发异常,不引发返回true。
26、STL提供了丰富的全局函数,包括查询,排序,复制等一系列算法。
2020年6月2日,星期二,凌晨2点01分,首次完整读完这本书,共勉。
学如逆水行舟,不进则退;心似平原放马,易纵难收。
C++ Primer Plus(四)的更多相关文章
- C++ primer 第四版 练习3.13,3.14
读一组整数到 vector 对象,计算并输出每对相邻元素的 和.如果读入元素个数为奇数,则提示用户后一个元素 没有求和,并输出其值. vector<int> ivec; int ival; ...
- C++学习书籍推荐《C++ Primer 第四版》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer中文版(第4版)>对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使<C++ Primer中文版 ...
- C++_系列自学课程_第_12_课_语句_《C++ Primer 第四版》
前面的文章说完了表达式和类型转换的部分内容,在我参考的书里面,接下来讨论的是各种语句,包括:顺序语句.声明语句.复合语句(块语句).语句作用域 .if语句.while语句.for语句.do...whi ...
- c++ Primer 第四版 第一阶段 const总结
由于期末值考一门软件安全,所以果断看起c++Primer ,因为之前看谭浩强的c++感觉没什么用啊.所以这本书每阶段做个总结!!! 1.Const限定符作用: 在for循环中上限应该用一个固定变量来设 ...
- C++Primer 第四章
//1.当我们对运算符进行重载的时候,其包括运算对象的类型和返回值的类型都是由该运算符定义的,但是运算对象的个数和优先级,结合律都是不能改变的 //2.当一个对象被用作右值的时候,用的是对象的值(内容 ...
- C++ Primer 第四版中文版
C++Primer是C++的经典教程. 开始时间:2014-08-10 完成时间:2014-08-28 学习成果:基础语法+
- <<C++ Primer>> 第四章 表达式
术语表 第 4 章 表达式 算术转换(arithmetic conversion): 从一种算术类型转换成另一种算术类型.在二元运算符的上下文中,为了保留精度,算术转换通常把较小的类型转换成较大的类型 ...
- C++ Primer 第四版阅读笔记
阅读笔记 初始化 变量定义指定了变量的类型和标识符,也可以为对象提供初始值.定义时指定了初始值的对象被称为是 已初始化的.C++ 支持两种初始化变量的形式:复制初始化和 直接初始化.复制初始化语法用等 ...
- C++_系列自学课程_第_11_课_类型转换_《C++ Primer 第四版》
上次说了关于表达式的一些内容,说到还有一些关于数据类型转换的内容,今天我们接着八一八C++中的数据类型转换. 一.隐式类型转换 在表达式中,有些操作符可以对多种类型的操作数进行操作, 例如 + 操作符 ...
- C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》
程序设计语言中大部分程序都在进行表达式的求值操作, 例如求两个数的和,求一个表达式的逻辑结果,或者通过输入输出表达式语句进行输入和输出. 这里我们对表达式进行讨论. 一.表达式 1.表达式 表达式由一 ...
随机推荐
- 附021.Traefik-ingress部署及使用
一 Helm部署 1.1 获取资源 [root@master01 ~]# mkdir ingress [root@master01 ~]# cd ingress/ [root@master01 ing ...
- SpringCloud Netflix (六):Config 配置中心
------------恢复内容开始------------ SpringCloud Config 配置中心 Config 配置中心 Spring Cloud Config为分布式系统中的外部化配置提 ...
- Java实现 LeetCode 780 到达终点(逻辑题)
780. 到达终点 从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y). 给定一个起点 (sx, sy) 和一个终点 (tx, ty),如果通过一系列的转换可以从起点到达终点,则 ...
- Java实现 蓝桥杯 算法训练VIP 报数(暴力+数学)约瑟夫环问题
试题 算法训练 报数 问题描述 现有n个同学站成一圈,顺时针编号1至n.从1号同学开始顺时针1/2报数,报到1的同学留在原地,报到2的同学退出圆圈,直到只剩一名同学为止.问最后剩下的同学编号. 输入格 ...
- (Java实现) 洛谷 P1115 最大子段和
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iA ...
- Java实现 蓝桥杯VIP 算法训练 入学考试
问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...
- Java实现 LeetCode 237 删除链表中的节点
237. 删除链表中的节点 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: ...
- Java实现 蓝桥杯 算法提高 最大值路径
试题 算法提高 最大值路径 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 刷微博,编程序.如下图所示,@北京发布 提出了如下"头脑震荡"问题.对此问题做一般化描 ...
- Java实现找零问题
1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < - < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < - ...
- 数组 & 链表
数组 是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据. 使用了连续的内存空间和相同类型的数据,使得它可以“随机访问”,但同时也让数组的删除,插入等操作变得非常低效, 为了保 ...