![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++ primer 笔记
Sin骑士
我是吊车尾
展开
-
第二章 变量和基本类型
C++语言规定:一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。可寻址的最小内存块成为“字节(byte),存储的基本单元称为“字(word)”。字由32或64比特构成。和C语言一样,C++的设计准则之一也是尽可能地接近硬件。当明确知晓数值不可能为负时,选用无符号类型。使用int执行整数运算。在实际应用中,short常常显得太原创 2015-03-16 20:13:05 · 676 阅读 · 0 评论 -
第十三章 拷贝控制
在定义任何 C++ 类时,拷贝控制操作都是必要部分。如果我们不显示定义这些操作,编译器也会为我们定义,但编译器定义的版本的行为可能并非我们所想。拷贝初始化不仅在我们用=定义变量时会发生,在下列情况下也会发生: ① 将一个对象作为实参传递给一个非引用类型的形参; ② 从一个返回类型为非引用类型的函数返回一个对象; ③ 用花括号列表初始化一个数组中的元素或一个聚合类中原创 2015-05-17 16:03:32 · 425 阅读 · 0 评论 -
第十五章 面向对象程序设计
面向对象程序设计(object-oriented programming)的核心思想是数据抽象、继承和动态绑定。C++11 标准允许派生类显示地注明它将使用哪个成员函数改写基类的虚函数,具体措施是在该函数的形参列表之后增加一个 override 关键字。在C++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定。基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操原创 2015-05-27 18:05:00 · 478 阅读 · 0 评论 -
第十一章 关联容器
关键字起到索引的作用,值则表示与索引相关联的数据。关联容器不支持顺序容器的位置相关的操作,例如 push_front 或 push_back 。原因是关联容器中元素是根据关键字存储的。标准情况下,标准库使用关键字类型的一个 map 的 value_type 是一个 pair(const key_type, mapped_type),我们可以改变 pair 的值,但是不能改变关键字成员的值。当解原创 2015-05-07 16:15:26 · 319 阅读 · 0 评论 -
第十二章 动态内存
静态内存用来保存局部 static 对象、类 static 数据成员以及定义在任何函数之外的变量。栈内存用来保存定义在函数内的非 static 对象。分配在静态或栈内存中的对象由编译器自动创建和销毁。除了静态内存和栈内存,每个程序还拥有一个内存池。这部分内存被称作自由空间(free store)或堆(heap)。程序用堆来存储动态分配的对象,即那些在程序运行时分配的对象。动态对象的生存期由程序来控原创 2015-05-13 15:03:27 · 398 阅读 · 0 评论 -
第十章 泛型算法
标准库并未给每个容器都定义成员函数来实现查找特定元素、替换或删除一个特定值、重排元素顺序等操作,而是定义了一组泛型算法( generic algorithm ):称它们为“算法”,是因为它们实现了一些经典算法的公共接口,如排序和搜索;称它们是“泛型的”,是因为它们可以用于不同类型的元素和多种容器类型。对于只读取而不改变元素的算法,通常最好使用 cbegin()和 cend()。但是如果你计划原创 2015-05-05 00:06:01 · 328 阅读 · 0 评论 -
第九章 顺序容器
新标准库容器的性能几乎肯定与最精心优化过的同类数据结构一样好(通常会更好)。现代 C++ 程序应该使用标准库容器,而不是更原始的数据结构,如内置数组。以下是一些选择容器的基本原则:① 除非你有很好的理由选择其他容器,否则应使用 vector 。② 如果你的程序有很多小的元素,且空间的额外开销很重要,则不要使用 list 或 forward_list 。③ 如果程序要求随机访问元素,原创 2015-04-28 12:32:28 · 337 阅读 · 0 评论 -
第八章 IO库
由于不能拷贝 IO 对象,因此我们也不能将形参或返回类型设置为流类型。进行 IO 操作的函数通常以引用方式传递和返回流。读写一个 IO 对象会改变其状态,因此传递和返回的引用不能是 const 。导致缓冲区刷新(即,数据真正写到输出设备或文件)的原因: ①程序正常结束,作为 main 函数的 return 操作的一部分,缓冲刷新被执行。 ②缓冲区满时,需要刷新缓冲,而后新的原创 2015-04-21 13:56:20 · 360 阅读 · 0 评论 -
第六章 函数
函数的调用完成两项工作:一是用实参初始化函数对应的形参,二是将控制权转移给被调用函数。此时,主调函数(calling function)的执行被暂时中断,被调函数(called function)开始执行。函数的返回类型不能是数组类型或函数类型,但可以是指向数组或函数的指针。内置类型的局部静态变量初始化为0。定义函数的源文件应该把含有函数声明的头文件包含起来,编译器负责验证函数的定义和原创 2015-04-09 12:00:50 · 369 阅读 · 0 评论 -
第七章 类
类的用户和类的设计者常常是同一个人。尽管如此,还是最好把角色区分开来。当我们设计类的接口时,应该考虑如何才能使得类易于使用;而当我们使用类时,不应该顾及类的实现机理。作为一个设计良好的类,既要有直观且易于使用的接口,也必须具备高效的实现过程。一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件内。因为IO类属于不能被拷贝的类型,因此我们只能通过引用来传递它原创 2015-04-14 12:53:11 · 387 阅读 · 0 评论 -
第五章 语句
使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的。有些编程风格要求在if或else之后必须写上花括号(对while和for语句的循环体两段也有同样的要求),这么做的好处是可以避免代码混乱不清,以后修改代码时如果想添加别的语句,也可以很容易地找到正确位置。case标签必须是整型常量表达式,且任何两个case标签的值不能相同,否则就会引发错误。一般不要省略case分支最原创 2015-04-04 23:11:20 · 353 阅读 · 0 评论 -
第四章 表达式
当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。m%(-n) == m%n (-m)%n == -(m%n)逻辑与运算符和逻辑或运算符都是先求左侧运算对象的值再求右侧运算对象的值,当且仅当左侧运算对象无法确定表达式的结果时才会计算右侧运算对象的值。这种策略称为短路求值(short-circuit evaluat原创 2015-03-31 23:06:36 · 398 阅读 · 0 评论 -
第三章 字符串、向量和数组
头文件不应包含using声明。C++标准一方面对库类型所提供的操作做了详细规定,另一方面也对库的实现者做出了一些性能上的需求。因此,标准库类型对于一般应用场合来说有足够的效率。如果使用等号(=)初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,如过不使用等号,则执行的是直接初始化(direct initia原创 2015-03-19 15:42:59 · 553 阅读 · 0 评论 -
第一章 开始
①main函数的返回类型必须为int,即整数类型。大多数系统中,main的返回值被用来指示状态,返回值0表示成功,非0的返回值的含义由系统定义,通常用来指出错误类型。②集成开发环境(Integrated Developed Environment,IDE)原创 2015-03-15 14:23:07 · 411 阅读 · 0 评论 -
第十四章 重载运算与类型转换
重载的运算符是具有特殊名字的函数:它们的名字由关键字 operator 和其后要定义的运算符号共同组成。我们只能重载已有的运算符,而无权发明新的运算符。逻辑与运算符、逻辑或运算符和逗号运算符的运算对象的求值顺序规则无法保留下来。 && 和 || 运算符的重载版本也无法保留内置运算符的短路求值属性,两个运算对象总是会被求值。因此不建议重载这些运算符。因为逗号运算符和取地址运算符已经有了内原创 2015-05-21 13:06:34 · 511 阅读 · 0 评论