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.表达式 表达式由一 ...
随机推荐
- Golang基础教程——map使用篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第7篇文章,我们来聊聊golang当中map的用法. map这个数据结构我们经常使用,存储的是key-value的键 ...
- 深入了解ConcurrentHashMap
在上一篇文章[简单了解系列]从基础的使用来深挖HashMap里,我从最基础的使用中介绍了HashMap,大致是JDK1.7和1.8中底层实现的变化,和介绍了为什么在多线程下可能会造成死循环,扩容机智是 ...
- 上位机C#通过OPCUA和西门子PLC通信
写在前面: 很多人在学习OPCUA的时候,有个非常苦恼的问题,就是没有OPCUA服务器的环境,这时候,有些人可能会想到通过类似于KepServer这样的软件来实现.那么,有没有一种方式,实现快速搭建O ...
- jchdl - GSL实例 - Assign
https://mp.weixin.qq.com/s/MtHR3iolPd5VQq6AUE-JPg Assign是一个节点,把输入线直接赋值给输出线.在转换成Verilog时,这种类型的节点会直接 ...
- 使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置
使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置 对前端来说锚点是一个很好用的技术,它能快速定位到预先埋好的位置. 但是美中不足的是它会改变请求地址url,当用户使用了锚点的 ...
- (Java实现) 细胞
细胞 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s ...
- Java实现 LeetCode 650 只有两个键的键盘(递归 || 数学)
650. 只有两个键的键盘 最初在一个记事本上只有一个字符 'A'.你每次可以对这个记事本进行两种操作: Copy All (复制全部) : 你可以复制这个记事本中的所有字符(部分的复制是不允许的). ...
- Java实现 LeetCode 1111 有效括号的嵌套深度(阅读理解题,位运算)
1111. 有效括号的嵌套深度 有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然.详情参见题末「有效括号字符串」部分. 嵌套深度 depth 定义:即有效括号字符串嵌套的层数, ...
- java实现第六届蓝桥杯垒骰子
垒骰子 题目描述 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰 ...
- Linux磁盘空间容量不够-通过新增磁盘-挂载原磁盘
首先上一张图 -------1)首先fdisk 一块磁盘并格式化 mkfs.ext4 /dev/sda15 --------2)将此磁盘挂载在mnt目录下,并将磁盘容量不够的磁盘所有文件进行复制到mn ...