本博客为阅读《C++ Primer》(第5版)的读书笔记
ps:刚开始的时候我将所有的笔记都放在一篇博客中,等看到第六章的时候发现实在是太多了,导致我自己都不想看,为了日后回顾(不那么有心理压力),我将笔记拆分为一章一章的。
- 在大多数系统中,
main
的返回值被用来指示状态。返回值0表示成功,非0的返回值的含义由系统定义,通常用来指出错误类型。在Unix
中程序运行以后返回值保存在$?
中(必须在刚运行后打印输出) - 编译时可能需要加上
-std=c++11
打开对C++11标准的支持,一般会加上-Wall
参数,可以对有问题的程序结构发出警告 - 如果想要通过打印语句进行调试,一定要及时使用
endl
操纵符刷新流,否则如果程序崩溃,可能无法得到输出信息,从而导致关于程序崩溃位置的错误推断 - 标准库定义的所有名字都在命名空间std中
/*
和*/
之间不能包含*/
,可以包含/*
和//
- 当我们使用一个
istream
对象作为条件时,其效果是检测流的状态。如果流是有效的(未遇到错误)检测成功,当遇到文件结束符(end-of-file
),或遇到一个无效输入时,istream
对象的状态会变为无效,返回假 - 在
Unix
系统中,文件结束符为Ctrl+D
- 按照编译错误报告的顺序来逐个修正错误,因为错误经常有传递效应,后面的错误经常是由前面的错误引起的。在每修改一个(或一小部分)明显的错误后就重新编译
- 用
cin
进行循环读入的格式为while(cin>>x)
。但是如果用Ctrl+C
中断读入会导致cin
失效 - 对
cin
和scanf
的输入速率进行了测试,一般情况下cin
比scanf
慢许多,在读入规模在1e6
规模就会有明显的差距。但是可以用ios::sync_with_stdio(false);
加速流,这样会关闭和stdio
的同步,在网上查了一下,这就要求我们在混用cout
和printf
的时候都要及时清空缓冲区(输出endl
或者\n
),问题不大。在加速流以后,cin
和scanf
的效率差不多,在1e8
数量级的时候cin
的效率超过了printf
(实测) - 注意判等运算符为
==
,为了避免写成=
出错,一个良好的编程习惯是常量 == 变量
,这样如果我们写错了就会报错 - 标准头文件一般不加后缀,包含来自标准库的头文件时,应该使用
<>
包围头文件,对于不属于标准库的头文件,则用""
包围 - 为了使用一个类,我们不必关心它是如何实现的,只需要知道类对象可以执行什么操作
- 点运算符
.
的运算结果是右侧运算对象指定的成员,调用运算符()
里面放置参数列表。 - 缓冲区是一个存储区域,用于保存数据。IO设施通常将输入(输出)数据保存在一个缓冲区中,读写缓冲区的动作与程序中的动作是无关的。我们可以显式地刷新缓冲区,以便强制将缓冲区中的数据写入输出设备。默认情况下,读
cin
会刷新cout
,程序非正常终止也会刷新cout
- 类类型的变量如果未指定初值,则按类定义指定的方式进行初始化。定义在函数内部的内置类型变量默认是不初始化的,除非有显式的初始化语句