完整阅读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_ptrunique_ptrshared_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(四)的更多相关文章

  1. C++ primer 第四版 练习3.13,3.14

    读一组整数到 vector 对象,计算并输出每对相邻元素的 和.如果读入元素个数为奇数,则提示用户后一个元素 没有求和,并输出其值. vector<int> ivec; int ival; ...

  2. C++学习书籍推荐《C++ Primer 第四版》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer中文版(第4版)>对C++基本概念和技术全面而且权威的阐述,对现代C++编程风格的强调,使<C++ Primer中文版 ...

  3. C++_系列自学课程_第_12_课_语句_《C++ Primer 第四版》

    前面的文章说完了表达式和类型转换的部分内容,在我参考的书里面,接下来讨论的是各种语句,包括:顺序语句.声明语句.复合语句(块语句).语句作用域 .if语句.while语句.for语句.do...whi ...

  4. c++ Primer 第四版 第一阶段 const总结

    由于期末值考一门软件安全,所以果断看起c++Primer ,因为之前看谭浩强的c++感觉没什么用啊.所以这本书每阶段做个总结!!! 1.Const限定符作用: 在for循环中上限应该用一个固定变量来设 ...

  5. C++Primer 第四章

    //1.当我们对运算符进行重载的时候,其包括运算对象的类型和返回值的类型都是由该运算符定义的,但是运算对象的个数和优先级,结合律都是不能改变的 //2.当一个对象被用作右值的时候,用的是对象的值(内容 ...

  6. C++ Primer 第四版中文版

    C++Primer是C++的经典教程. 开始时间:2014-08-10 完成时间:2014-08-28 学习成果:基础语法+

  7. <<C++ Primer>> 第四章 表达式

    术语表 第 4 章 表达式 算术转换(arithmetic conversion): 从一种算术类型转换成另一种算术类型.在二元运算符的上下文中,为了保留精度,算术转换通常把较小的类型转换成较大的类型 ...

  8. C++ Primer 第四版阅读笔记

    阅读笔记 初始化 变量定义指定了变量的类型和标识符,也可以为对象提供初始值.定义时指定了初始值的对象被称为是 已初始化的.C++ 支持两种初始化变量的形式:复制初始化和 直接初始化.复制初始化语法用等 ...

  9. C++_系列自学课程_第_11_课_类型转换_《C++ Primer 第四版》

    上次说了关于表达式的一些内容,说到还有一些关于数据类型转换的内容,今天我们接着八一八C++中的数据类型转换. 一.隐式类型转换 在表达式中,有些操作符可以对多种类型的操作数进行操作, 例如 + 操作符 ...

  10. C++_系列自学课程_第_10_课_表达式_《C++ Primer 第四版》

    程序设计语言中大部分程序都在进行表达式的求值操作, 例如求两个数的和,求一个表达式的逻辑结果,或者通过输入输出表达式语句进行输入和输出. 这里我们对表达式进行讨论. 一.表达式 1.表达式 表达式由一 ...

随机推荐

  1. Nginx 笔记(二)nginx常用的命令和配置文件

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.nginx常用的命令 (1)启动命令 在/usr/local/nginx/sbin 目录下执行 ./ ...

  2. Java实现 蓝桥杯 算法提高 计算超阶乘(暴力)

    试题 算法提高 计算超阶乘 问题描述 计算1*(1+k)(1+2k)(1+3k)-(1+n*k-k)的末尾有多少个0,最后一位非0位是多少. 输入格式 输入的第一行包含两个整数n, k. 输出格式 输 ...

  3. Java实现 蓝桥杯VIP 算法提高 3-2求存款

    算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...

  4. Java实现 蓝桥杯 算法提高 矩形靶

    试题 算法提高 矩形靶 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 在矩形的世界里任何事物都是矩形的,矩形的枪靶,甚至矩形的子弹.现在给你一张NM的枪靶,同时告诉你子弹的大小为( ...

  5. iOS -App主流框架UINavigationController && UITabBarController的简单使用

     一个iOS app几乎没有由一个控制器组成,除非这个app非常简单.       当app中有多个控制器的时候,就需要对这些控制器进行管理,用1个控制器去管理其他多个控制器:       如图所示: ...

  6. xlua中lua对象到c#对象的转型

    lua中的类型 基础类型 #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERDATA 2 #define LUA_TNUM ...

  7. 一文讲透Java序列化

    本文目录 一.序列化是什么 二.为什么需要序列化 三.序列化怎么用 四.序列化深度探秘 4.1 为什么必须实现Serializable接口 4.2 被序列化对象的字段是引用时该怎么办 4.3 同一个对 ...

  8. 白嫖永久免费云服务器教程,永久免费虚拟主机、永久免费云数据库、搭建FTP服务器、服务器安装Linux / windows操作系统、服务器部署网站、宝塔一键部署多网站、独立ip、永久国内高速云服务器

    一.准备工作 1. 注册账号 声明:切记不可用服务器做违法的事情 申请地址:https://www.sanfengyun.com/ 图文教程地址:https://www.cnblogs.com/zwn ...

  9. mac 排查被占端口

    Last login: Wed Sep :: on ttys000 sam:~ sam$ sudo lsof -i : Password: COMMAND PID USER FD TYPE DEVIC ...

  10. JAVA 代码查错

    1.abstract class Name { private String name; public abstract boolean isStupidName(String name){}} 大侠 ...