【C++基础】第二十九课:简单语句

表达式语句,空语句,复合语句(块)

Posted by x-jeff on August 28, 2021

【C++基础】系列博客为参考《C++ Primer中文版(第5版)》C++11标准)一书,自己所做的读书笔记。
本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.表达式语句

C++语言中的大多数语句都以分号结束,一个表达式,比如ival+5,末尾加上分号就变成了表达式语句(expression statement)

2.空语句

最简单的语句是空语句(null statement),空语句中只含有一个单独的分号:

1
;//空语句

如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。例如,我们想读取输入流的内容直到遇到一个特定的值为止,除此之外什么事情也不做:

1
2
while (cin >> s && s != sought)
	;//空语句

3.分号的使用

因为空语句是一条语句,所以可用在任何允许使用语句的地方。由于这个原因,某些看起来非法的分号往往只不过是一条空语句而已:

1
ival = v1 +v2;;//正确:第二个分号表示一条多余的空语句

多余的空语句一般来说是无害的,但是如果在if或者while的条件后面跟了一个额外的分号就可能完全改变程序员的初衷。例如,下面的代码将无休止地循环下去:

1
2
3
//额外的分号,循环体是那条空语句
while (iter != svec.end() ) ;//while循环体是那条空语句
	++iter;//递增运算不属于循环的一部分

虽然从形式上来看执行递增运算的语句前面有缩进,但它并不是循环的一部分。循环条件后面跟着的分号构成了一条空语句,它才是真正的循环体。

4.复合语句(块)

复合语句(compound statement)是指用花括号括起来的(可能为空的)语句和声明的序列,复合语句也被称作块(block)。一个块就是一个作用域,在块中引入的名字只能在块内部以及嵌套在块中的子块里访问。通常,名字在有限的区域内可见,该区域从名字定义处开始,到名字所在的(最内层)块的结尾为止。例如:

1
2
3
4
while (val <= 10) {
	sum += val;
	++val;
}

⚠️块不以分号作为结束。

所谓空块,是指内部没有任何语句的一对花括号。空块的作用等价于空语句:

1
2
while (cin >> s && s != sought)
	{ } //空块