二刷c++primer学习笔记
文章平均质量分 85
peakyblinder
这个作者很懒,什么都没留下…
展开
-
第五章
5.3.2只有在必要时才使用后置操作符 前置操作需要做的工作更少,只需加 1 后返回加 1 后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加 1 之前的值作为操作的结果。 对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。 5.11 一旦删除了指针所指向的对象,立即将指针置为 0,这样就非常清楚地表明指针不再指向任何对象。 5.12.6co...原创 2018-04-15 11:25:36 · 137 阅读 · 0 评论 -
第十七章
17.1.1 被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。 因为在处理异常的时候会释放局部存储,所以被抛出的对象就不能再局部存储,而是用 throw 表达式初始化一个称为异常对象的特殊对象。异常对象由编译器管理,而且保证驻留在可能被激活的任意 catch 都可以访问的空间。这个对象由 throw 创建,并被初始化为被抛出的表达式的副本。异常对...原创 2018-05-23 22:43:54 · 154 阅读 · 0 评论 -
第十六章
16.1.1 函数模板可以用与非模板函数一样的方式声明为 inline。说明符放在模板形参表之后、返回类型之前,不能放在关键字 template 之前。 16.1.3 模板形参遵循常规名字屏蔽规则。与全局作用域中声明的对象、函数或类型同名的模板形参会屏蔽全局名字: typedef double T;template <class T> T calc(con...原创 2018-05-21 16:17:35 · 179 阅读 · 0 评论 -
第十五章
基类成员函数 除了构造函数之外,任意非 static 成员函数都可以是虚函数。保留字只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。15.2.2 protected 还有另一重要性质: 派生类只能通过派生类对象访问其基类的 protected 成员,派生类对其基类类型对象的 protected 成员没有特殊访问权限:void Bulk_item:...原创 2018-05-12 19:16:53 · 228 阅读 · 1 评论 -
第十三章
13.1拷贝构造函数和赋值函数区别: 调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。如果产生了新的对象实例,那调用的就是拷贝构造函数;如果没有,那就是对已有的对象赋值,调用的是赋值运算符。 话句话说,就是初始化时调用的是拷贝构造函数,赋值时调用赋值操作。 复制初始化首先使用指定构造函数创建一个临时对象(第 7.3.2 节),然后用复制...原创 2018-05-08 22:11:25 · 2489 阅读 · 0 评论 -
第十二章
12.1.4 因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。然而,只要类名一出现就可以认为该类已声明。因此,类的数据成员可以是指向自身类型的指针或引用: class LinkScreen {Screen window;LinkScreen *next;LinkScreen *prev;};12.2 基于成员函数是否为 const, 可以重...原创 2018-04-25 22:26:16 · 179 阅读 · 0 评论 -
第十章
10.3 map 是键-值对的集合。map 类型通常可理解为关联数组(associativearray) :可使用键作为下标来获取一个值,正如内置数组类型一样。而关联的本质在于元素的值与某个特定的键相关联, 而并非通过元素在数组中的位置来获取。 在使用关联容器时, 它的键不但有一个类型, 而且还有一个相关的比较函数。默认情况下,标准库使用键类型定义的 < 操作符...原创 2018-04-21 17:14:39 · 173 阅读 · 0 评论 -
第十四章
14.1 用于内置类型的操作符,其含义不能改变。例如,内置的整型加号操作符不能重定义: // error: cannot redefine built-in operator for intsint operator+(int, int); 重载操作符必须具有至少一个类类型或枚举类型(第 2.7 节)的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符...原创 2018-05-09 21:52:45 · 155 阅读 · 0 评论 -
第九章
9.1.1 将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。 使用迭代器时,不要求容器类型相同。容器内的元素类型也可以不相同,只要它们相互兼容,能够将要复制的元素转换为所构建的新容器的元素类型,即可实现复制。 不提供元素初始化式时, 标准库将为该容器实现值初始化(3.3.1节)。采用这种类型的初始化,元素类型必须是内置或复合类...原创 2018-04-19 17:40:35 · 129 阅读 · 0 评论 -
第十一章
11.1关键概念:算法永不执行容器提供的操作 泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。算法基于迭代器及其操作实现,而并非基于容器操作。这个事实也许比较意外,但本质上暗示了:使用“普通”的迭代器时,算法从不修改基础容器的大小。正如我们所看到的,算法也许会改变存储在容器中的元素的值,也许会在容器内移动元素,但是,算法从不直接添加或删除元素。第 11.3.1 节...原创 2018-04-23 21:34:40 · 165 阅读 · 0 评论 -
第八章
8.1IO 对象不可复制或赋值ofstream out1, out2;out1 = out2; // error: cannot assign stream objects// print function: parameter is copiedofstream print(ofstream);out2 = print(out2); // error: cannot copy strea...原创 2018-04-18 22:03:24 · 142 阅读 · 0 评论 -
第四章
4.1.1 非 const 变量以及要到运行阶段才知道其值的 const变量都不能用于定义数组的维数。 int staff_size = 27; // nonconstconst unsigned sz = get_size(); // const value not known until run timedouble sala...原创 2018-04-13 11:50:54 · 135 阅读 · 0 评论 -
第三章
在头文件中最好使用完全限定的标准库名字,防止其中的using声明被应用于包含此头文件的源文件中。3.2.2cin>>string; //从第一个非空白字符到第一个空白字符,空白符任然存在于输入流中getline(cin,line); //读取到第一个换行符,并将换行符舍弃后存入line,换行符从输入流中除去3.2.3 string...原创 2018-04-12 17:42:13 · 120 阅读 · 0 评论 -
第二章
标准库定义了4个IO对象:标准输入——cin,标准输出——cout,标准错误——cerr,产生执行程序的一般信息——clog2.3.3 初始化: C++有两种初始化格式:复制初始化和直接初始化int ival=1024; //复制初始化int ival(1024); //直接初始化 初始化类类型对象时,复制初始化和直接初始化差别很微妙,详见13章,初始化内...原创 2018-04-11 22:40:59 · 157 阅读 · 0 评论 -
第七章
C++ 语言使用调用操作符(即一对圆括号)实现函数的调用。 如果将形参定义为非引用的 const 类型: void fcn(const int i) { /* fcn can read but not write to i */ } 则在函数中,不可以改变实参的局部副本。由于实参仍然是以副本的形式传递,因此传递给 fcn 的既可以是 const 对象也...原创 2018-04-17 11:24:16 · 225 阅读 · 0 评论 -
第六章
6.6.5 对于 switch 结构,只能在它的最后一个 case 标号或 default 标号后面定义变量: case true:// error: declaration precedes a case labelstring file_name = get_file_name();break;case false: 制定这个规则是为避免出现代码跳过变量的定...原创 2018-04-16 15:12:18 · 150 阅读 · 0 评论 -
第十八章
18.1.1 对未构造的内存中的对象进行赋值而不是初始化,其行为是未定义的。对许多类而言,这样做引起运行时崩溃。赋值涉及删除现存对象,如果没有现存对象,赋值操作符中的动作就会有灾难性效果。18.1.2allocator<T> a;定义名为 a 的 allocator 对象,可以分配内存或构造 T 类型的对象a.allocate(n)分配原始的未构造内存以保存 T 类型的 ...原创 2018-05-25 10:41:53 · 161 阅读 · 0 评论