从今天起开始C++ Primer第二遍的阅读工作,
以后将以博客的形式记录一些自己在第一遍阅读中疏漏的地方或者自认为比较重要的地方。欢迎大家阅读和指正。
注:本文适合对C++语言有一定基础的读者,对于C++的初学者,请先阅读完整版的C++相关书籍。
main 函数的返回值必须是 int 型,该类型表示整数。
当 return 带上一个值(如 0)时,这个值就是函数的返回值。返回值类型必须和函数的返回类型相同,或者可以转换成函数的返回类型。对于 main 函数,返回类型必须是 int 型,0 是 int 型的。
在大多数系统中,main 函数的返回值是一个状态指示器。返回值 0 往往表示 main 函数成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。通常非零返回值表明有错误出现。每一种操作系统都有自己的方式告诉用户 main 函数返回什么内容。
C++ 并没有直接定义进行输入或输出(IO)的任何语句,这种功能是由标准库提供的。
标准库还定义了另外两个 ostream 对象,分别命名为 cerr 和 clog(分别读作“see-err”和“see-log”)。cerr 对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息。
#include 指示必须单独写成一行——头文件名和 #include 必须在同一行 。通常,#include 指示应出现在任何函数的外部。而且习惯上,程序的所有 #include 指示都在 文件开头部分 出现。
endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。
缓冲区:一段用来存放数据的存储区域。IO 设备常存储输入(或输出)到缓冲区,并独立于程序动作对缓冲区进行读写。输出缓冲区通常必须显式刷新以强制输出缓冲区内容。默认情况下, 读 cin 会刷新 cout ;当程序正常结束时,cout 也被刷新。
程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,将会导致程序错误推断崩溃位置。
命名空间:将库所定义的名字放至单独一个地方的机制。 命名空间有助于避免无意的命名冲突 。C++ 标准库所定义的名字在命名空间 std 中。
定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。
块是被花括号括起来的语句序列。C++ 中, 块可用于任何可以用一条语句的地方 。
在选择格式化风格时,要考虑提高程序的可读性,使其更易于理解。一旦选择了某种风格,就要始终如一地使用。
for (int val = 1; val <= 10; ++val) 退出 for 循环后,变量 val 不再可访问 ,循环终止后使用 val 是不可能的。然而,不是所有的编译器都有这一要求。
按错误报告的顺序改正错误是个好习惯,通常一个错误可能会产生一连串的影响,并导致编译器报告比实际多得多的错误。最好在每次修改后或最多改正了一些显而易见的错误后,就重新编译代码。
在写 C++ 程序时,大部分出现空格符的地方可用换行符代替。这条规则的一个例外是字符串字面值中的空格符不能用换行符代替。另一个例外是空格符不允许出现在预处理指示中。
操作系统使用不同的值作为文件结束符。Windows 系统下我们通过键入 control—z——同时键入“ctrl”键和“z”键,来输入文件结束符。Unix 系统中,包括 Mac OS—X 机器,通常用 control—d。
使用类时我们不需要知道这个类是怎样实现的,相反,我们需要知道的是该类提供什么操作。
标准库的头文件用尖括号 < > 括起来,非标准库的头文件用双引号 " " 括起来。
成员函数是由类定义的函数,有时称为类方法。
当调用成员函数时,(通常)指定函数要操作的对象。语法是使用点操作符(.),操作符仅应用于类类型的对象:左操作数必须是类类型的对象,右操作数必须指定该类型的成员。与大多数其他操作符不同,点操作符(“.”)的右操作数不是对象或值,而是成员的名字。
标准库:每个 C++ 编译器必须支持的类型和函数的集合。标准库提供了强大的功能,包括支持 IO 的类型。C++ 程序员谈到的“标准库”,是指整个标准库,当提到某个标准库类型时也指标准库中某个特定的部分。例如,程序员提到的“iostream 库”,专指标准库中由 iostream 类定义的那部分。