本博客为阅读《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 - 类类型的变量如果未指定初值,则按类定义指定的方式进行初始化。定义在函数内部的内置类型变量默认是不初始化的,除非有显式的初始化语句