首先介绍一个简单的C++程序,该程序仅输出消息:
#include <iostream> //预处理int main() //函数头{ //开始函数体using namespace std; //使定义可见cout << "Come up and C++ me some time."; //消息cout << endl; //开始新行cout << "You won't regret it!" << endl; //更多输出return 0; //结束函数体}
2.1.1 main()函数
基本结构如下:
int main(){//语句return 0;}
以上代码定义了一个main()函数,并描述了该函数的行为。第一行叫函数头(function heading),花括号中的叫函数体,最后一条语句叫返回语句(return statement)。
语句和分号 编译器需要知道一条语句何时结束,C++使用分号作为终止符(terminator)。
- 作为接口的函数头
C++要求 main() 的定义以 int main() 开始。编译器会将一些启动代码添加到程序中,这段代码是程序和操作系统之间的桥梁,而启动代码就会调用 main()。
- 为什么 main() 不能使用其他名称
如果没有 main(),编译器会发出警告。如果编写lib模块,则不需要。
2.1.2 C++注释
C++注释以 // 开始,C注释用 /…/,两者都可以用。
//这是C++风格注释/* 这是C风格注释 */
2.1.3 预处理器和 iostream 文件
以下代码使用了C++输入输出工具:
#include <iostream>using namespace std;
第一行编译指令会令预处理器将 iostream 文件的内容添加到程序中,这是典型的预处理操作。实际上,iostream 文件的内容会取代 #include
2.1.4 头文件名
C头文件使用 .h 扩展名,C++头文件没有扩展名,例如,math.h 这种C头文件。有些C头文件会转换为C++头文件,去掉h扩展名并加上c前缀,如C++版本的 math.h 转换为 cmath。
下表是头文件命名约定:
| 头文件类型 | 约定 | 示例 | 说明 |
|---|---|---|---|
| C风格(旧) | 以 .h 结尾 | math.h | C、C++可用 |
| C++风格(旧) | 以 .h 结尾 | iostream.h | C++可用 |
| C++风格(新) | 没有扩展名 | iostream | C++可用,可以使用 namespace std |
| 转换后的C | 没有扩展名,加c前缀 | cmath | C++可用,可以使用 namespace std |
2.1.5 命名空间
名称空间支持是一项C++特性。使用C++风格的头文件就可以使用 using namespace std; 名称空间编译指令了。
在大型项目中,通常使用所需的名称更好,而不是使用 using namespace std:
using std::cout;using std::endl;using std::cin;
2.1.6 使用 cout 输出
代码:
cout << "Come up and C++ me some time.";
双引号括起来的是字符串。<<符号表示将字符串发送给 cout,该符号指出了信息流动的路径。与其说程序显示了一条消息,不如说它将一个字符串插入到了输出流中。
初识运算符重载 通过重载,一个运算符可以有多种含义,编译器可以根据上下文来确定其含义。例如,<<表示插入运算符、左移运算符,&表示地址运算符、按位AND运算符,*表示乘法、解除引用。C++扩展了运算符重载概念,允许用户定义的类型(类)重新定义运算符的含义。
- 控制符 endl
在输出流中插入 endl 会导致屏幕光标换行,这种特殊符号被称为控制符(manipulator)。
- 换行符
C++也可以使用C的换行 \n,这被称为“转义序列”。与 endl 的区别是:endl 运行前会刷新输出立即显示,而 \n 不能保证立马输出。
2.1.7 C++代码格式化
以下代码虽然合法,但不好看:
#include <iostream>intmain() {//...return 0;}
C++11新增的原始字符串(raw)可以包含回车,将在第4章讨论。
