C++ 语言既有只完成单一任务的简单语句,也有作为一个单元执行的由一组语句组成的复合语句。和大多数语言一样,C++也提供了实现条件分支结构的语句以及重复地执行同一段代码的循环结构。

简单语句

C++ 中,大多数语句以分号结束。表达式语句用于计算表达式。但执行下面的语句

ival + 5; // expression statement

却没有任何意义:因为计算出来的结果没有用于赋值或其他用途。通常,表达式语句所包含的表达式在计算时会影响程序的状态,使用赋值、自增、输入或输出操作符的表达式就是很好的例子。

空语句

程序语句最简单的形式是空语句,它使用以下的形式(只有一个单独的分号):

; // null statement

如果在程序的某个地方,语法上需要一个语句,但逻辑上并不需要,此时应该使用空语句。

// read until we hit end-of-file or find an input equal to sought
while (cin >> s && s != sought)
; // null statement

循环条件从标准输入中读入一个值并检验 cin 的读入是否成功。如果成功读取数据,循环条件紧接着检查该值是否等于 sought。如果找到了需要的值,则退出 while 循环;否则,循环条件再次从 cin 里读入另一个值继续检验。

使用空语句时应该加上注释,以便任何读这段代码的人都知道该语句是有意省略的。

由于空语句也是一个语句,因此可用在任何允许使用语句的地方。由于这个原因,那些看似非法的分号往往只不过是一个空语句而已:

// ok: second semicolon is superfluous null statement
ival = v1 + v2;;

这个程序段由两条语句组成:一条表达式语句和一条空语句。

无关的空语句并非总是无害的。在 while 或 if 条件后面额外添加分号,往往会彻底改变程序员的意图:

// disaster: extra semicolon: loop body is this null statement
while (iter != svec.end()) ; // null statement--while body is empty!
++iter; // increment is not part of the loop

这个程序将会无限次循环。与缩进的意义相反,此自增语句并不是循环的一部分。由于循环条件后面多了一个分号,因此循环体为空语句。