《C++Primer》读书笔记——第一章:开始

来源:互联网 发布:ipad无法加入网络热点 编辑:程序博客网 时间:2024/05/07 03:05

1.1 编写一个简单的C++程序

1. 操作系统通过调用main函数来运行C++程序。

2. 一个函数的定义包含4个部分:返回类型(return type)、函数名(function name)、形参列表(parameter list)(括号包围,允许为空),以及函数体(function body):


3. main函数的返回类型必须为int,即整数类型。

4. 内置类型(built-in type)是语言自身定义的类型,int类型就是一种。

5. 函数体是一个语句块(block of statements),以左花括号开始,以右花括号结束。

6. return语句的功能是结束函数的执行,当return语句包括一个值时,它还会向调用者返回一个值。

7. 如果return语句包含一个值,那么这个值的类型必须与函数的返回类型相容。

8. 大多数C++语句以分号表示结束,它们很容易被忽略。如果忘记写分号,往往会导致各种莫名其妙的编译错误。(因为即使你写的是错误的,编译器还是会试图去理解你写的错误代码= =)

9. 在大多数系统中,main的返回值被用来指使状态,返回值0表明成功,非0的返回值的含义由系统定义,通常用来指出错误类型。

10. “类型”定义了数据元素的内容,和这类数据上可以进行的运算

11. 每个变量都有自己的类型。如果一个名为v的变量的类型为T,我们常说“v具有类型T”,或“v是一个T类型的变量”。


1.1.1 编译、运行程序

程序源文件命名约定

1. 程序文件通常被称为源文件(source file),常见的源文件后缀名有:.cc、.cxx、.cpp、.cp及.C。


从命令行运行编译器

1. 假定我们的main程序保存在文件prog1.cc中,可以用如下命令来编译它:

$ CC prog1.cc
其中,CC是编译器程序的名字,$是系统提示符。比如说在Windows系统下使用GCC进行编译,上面的命令将会是这样的:


2. 对于上述命令,微软的编译器生成的可执行文件名为“prog1.exe”,而UNIX系统中的编译器通常将可执行文件命名为“a.out”。

3. 在Windows系统中运行可执行文件,可以忽略其扩展名.exe

4. 在某些系统(应该为Windows家族的系统)中,即使文件就在当前目录或文件夹中,也必须显式指出文件的位置:

$ .\prog1
“.”后跟一个反斜线指出该文件在当前目录中。
5. 不同于Windows,在UNIX系统中运行一个可执行文件,不能忽略文件扩展名:
$ a.out
6. 如果需要指定位置(应该为UNIX或Linux系统),需要用一个“.”后跟一个斜线来指出可执行文件位于当前目录中:
$ ./a.out
7. 在Windows系统中通过命令访问main函数的返回值的方法:
$ echo %ERRORLEVEL%
8. 在UNIX系统中通过命令访问main函数的返回值的方法:
$ echo $?
9. 对于GNU编译器(g++),编译参数“-o”能够指定可执行文件的文件名:
$ g++ -o prog1 prog1.cpp
对于上述命令,在UNIX系统中将会生成一个名为“prog1”的可执行文件,没有后缀;而在Windows系统中,生成的可执行文件名为“prog1.exe”,后缀为.exe。

如果省略了-o参数,g++编译器会在UNIX系统中生成一个名为“a.out”的可执行文件,在Windows系统中生成一个名为“a.exe”的可执行文件。

10. 对GNU编译器(g++),可以通过参数“-std=c++0x”来打开对C++11的支持:

$ g++ -std=c++0x prog1.cpp

或者使用参数“-std=c++11”:

$ g++ -std=c++11 prog1.cpp

11. 编译器通常包含一些能够对有问题的程序结构发出警报的选项,打开这些选项是一个好习惯。在GNU编译器中,可以通过“-Wall”选项打开:

$ g++ -Wall prog1.cpp

对微软编译器来说,这个选项是“/W4”。


1.2 初识输入输出

1. C++通过一个全面的标准库(standard library)来提供IO机制。

2. iostream库包含两个基础类型:istream和ostream,分别表示输入流和输出流。


标准输入输出对象

1. 标准库定义了4个IO对象:

①处理输入的cin(发音为see-in),,是一个istream对象,也被称为“标准输入”(standard input)

②处理输出的cout(发音为see-out),是一个ostream类型的对象,也被称作“标准输出”(standard output)

③输出警告和错误消息的cerr(发音为see-err),是一个ostream类型的对象,也被称作“标准错误”(standard error)

④输出程序运行时的一般性信息的clog(发音为see-log),也是一个ostream类型的对象

2. 通常,这些对象将与程序所运行的窗口互相关联。也就是说,当我们使用cin时,数据从程序正在运行的窗口读入,而当我们向cout、cerr和clog写入数据时,将会写到同一个窗口


一个使用IO库的程序

#include<iostream>int main(){std::cout << "Hello World" << std::endl;return 0;}

1. 程序的第一行

#include<iostream>
告诉编译器我们想要使用iostream库。尖括号中的(iostream)是一个头文件(header)的名字,每个使用标准库设施的程序都必须包含相关的头文件(比如说要使用cout就要包含iostream库的头文件)。

2. “#include”指令和头文件的名字必须写在同一行中。

3. 通常情况下,“#include”必须出现在所有函数之外。

4. 一般将一个程序的所有“#include”指令都放在源文件的开始位置。


向流写入数据

1. 表达式(expression)由一个或多个运算对象和运算符组成,一个表达式产生一个计算结果。

2. 上节代码中的语句:

std::cout << "Hello World" << std::endl;
使用输出运算符(<<)在标准输出上打印消息。

3. <<运算符接受两个运算对象:左侧的运算对象必须是一个ostream类型的对象,右侧的运算对象是要打印的值,这个运算符的功能是将给定的值写入给定的ostream对象中。

4. 输出运算符的计算结果是其左侧的运算对象(计算结果就是我们写入给定值的那个ostream对象),所以上述表达式等价于:

(std::cout << "Hello World" )<< std::endl;// 左侧括号在完成运算后,表达式将变成std::cout << std::endl;,这是为什么输出运算符能够拼接的原理
也等价于:

std::cout << "Hello World";std::cout << std::endl;
5. 用一对双引号包围的字符序列被称为字符串字面值常量(string literal),如"Hello World"就是一个。

6. 将字符串字面值作为输出运算符的右侧运算对象,会将双引号之间的文本打印到标准输出。

7. “endl”是一个“操纵符”(manipulator),写入endl的效果是结束当前行,并将与设备关联的缓冲区(buffer)中的内容刷到设备中。

8. 缓冲刷新操作能够保证所有输出都真正写入输出流中,而不是仅仅停留在内存中等待写入流(遇到输入流时会强制刷新输出缓存?)。

9. 调试用的打印语句应当始终保证刷新流,否则如果程序崩溃,输出可能还留在缓冲区中,从而导致关于程序崩溃位置的错误推断(可以通过写入操纵符flush/endl,或者直接使用cerr)。


使用标准库中的名字

1. “std::cout”和“std::endl”,其中的前缀“std::”指出“cout”和“endl”是定义在名为“std”的命名空间(namespace)中的。

2. 命名空间能够帮助避免不经意的名字冲突。

3. 标准库定义的所有名字都在命名空间“std”中。


从流读取数据

1. 定义两个名为v1和v2的int类型变量(variable),并将它们初始化为0:

int v1 = 0, v2 = 0;
2. 初始化一个变量,就是在变量创建的同时为它赋予一个值。

3. 我们可以通过语句:

std::cin >> v1 >> v2;
来依次从标准输入中读取数据并赋值给v1和v2。

4. 输入运算符(>>)(与输出运算符类似),接受两个运算对象,其左侧运算对象为一个istream类型的对象,右侧运算对象为接受输入的对象,它的作用是从给定的istream对象中读入数据,并存入给定对象中。

5. 输入运算符也返回其左侧运算对象作为其运算结果。上述表达式等价于:

(std::cin >> v1) >> v2;
也等价于:
std::cin >> v1;std::cin >> v2;

打印结果(原书中“完成程序”)

1. 对于拼接在同一条输出语句中的多个输出运算符,其右侧运算对象的类型可以不相同:
std::cout << "The sum of " << v1 << " + " << v2 << " is " << v1 + v2 << std::endl;
上述表达式中,"The sum of "是一个字符串字面值常量,而v1、v2和v1+v2的运算结果则是int类型的值。
0 0
原创粉丝点击