首先介绍一个简单的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>
int
main
() {
//...
return 0;
}
C++11新增的原始字符串(raw)可以包含回车,将在第4章讨论。