C++ Primer 简单语句

欢迎阅读我的 【C++Primer】专栏

专栏简介:本专栏主要面向C++初学者,解释C++的一些基本概念和基础语言特性,涉及C++标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。希望对读者有帮助!


目录

5.1简单语句

C++语言中的大多数语句都以分号结束,一个表达式,比如ival+5,未尾加上分号就变成了表达式语句(expression statement)。表达式语句的作用是执行表达式并丢弃掉求值结果:

cpp 复制代码
ival + 5;     //一条没什么实际用处的表达式语句
cout << ival; //一条有用的表达式语皂

第一条语句没什么用处,因为虽然执行了加法,但是相加的结果没被使用。比较普遍的情况是,表达式语句中的表达式在求值时附带有其他效果比如给变量赋了新值或者输出了结果。

空语句

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

cpp 复制代码
//空语句如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。例如,我们想读取输入流的内容直到遇到一个特定的值为止,除此之外什么事情也不做:
//重复读入数据直至到达文件末尾或菜次输入的值等于sought
while(cin>>s & s!=sought)
;//空语句

while循环的条件部分首先从标准输入读取一个值并且隐式地检查cin,判断读取是否成功。判定读取成功,条件的后半部分检查读进来的值是否等于sought的值。如果发现了想要的值,循环终止;否则,从cin中继续读取另一个值,再一次判断循环的条件。

使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的。

别漏写分号,也别多写分号

因为空语句是一条语句,所以可用在任何允许使用语句的地方。由于这个原因,这些看起来非法的分号往往只不过是一条空语句而已,从语法上说得过去。下面的片段包含两条语句:表达式语句和空语句。

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

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

cpp 复制代码
//出现了糟糕的情况:额外的分号,循环体是那条空语句
while(iter!=svec.end());    //while循环体是那条空语句
    ++iter;                 //递增运算不属于循环的一部分

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

从多余的空语句并非总是无害的。

复合语句(块)

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

如果在程序的某个地方,语法上需要一条语句,但是逻辑上需要多条语句,则应该使用复合语句。例如,while或者for的循环体必须是一条语句,但是我们常常需要在循环佛内做很多事情,此时就需要将多条语句用花括号括起来,从而把语句序列转变成块。

举个例子,如下的while循环:

cpp 复制代码
while(val<=10){
   sum+=val;//把sum+va1的值赋给sum。
   ++val;//给val加1
}

程序从逻辑上来说要执行两条语句,但是while循环只能容纳一条。此时,把要执行的语句用花括号括起来,就将其转换成了一条(复合)语句。

块不以分号作为结束。

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

cpp 复制代码
while(cin>>s&& != sought)
    {}//空块
相关推荐
Non importa几秒前
【初阶数据结构】线性表之双链表
c语言·开发语言·数据结构·c++·考研·链表·学习方法
躺着听Jay2 分钟前
QT错误集合
开发语言·qt
长流小哥10 分钟前
Qt 动画学习 入门Qt,怎能少了学动画!
开发语言·qt·学习
学习同学12 分钟前
C++初阶知识复习 (31~45)
开发语言·c++
A1-2932 分钟前
C++的四种类型转换
开发语言·c++
一晌小贪欢35 分钟前
Pygame第10课——俄罗斯方块
开发语言·python·pygame·python游戏·俄罗斯方块
lsx2024061 小时前
HTML 区块元素全面解析
开发语言
_不会dp不改名_1 小时前
Windows10 下QT社区版的安装记录
开发语言·qt
joekl1 小时前
python练习题
开发语言·python
盛满暮色 风止何安1 小时前
VLAN的高级特性
运维·服务器·开发语言·网络·网络协议·网络安全·php