《C++Primer》第五章 语句

2020-11-17  本文已影响0人  TOMOCAT

写这篇文章的目的

身为C++的零基础初学者,短期内把《C++Primer》啃下来是一个比较笨但是有效的方法,一方面可以掌握比较规范的C++语法(避免被项目中乱七八糟的风格带跑偏),另一方面又可以全面地了解C++语法以及C++11新标准(后续要做的事情就剩下查漏补缺,不断完善自己的知识体系)。

个人感觉从零学习一门新知识比较好的方法是快速了解知识的全貌,然后构建自己的知识地图,后续不断地补充相应的细节。

由于《C++Primer》和大多数的教科书一样废话连篇,因此想要精炼一下每篇文章的内容再打印成pdf,方便温故知新。

空语句

如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会使用到空语句。例如我们想读取输入流的内容直到遇到一个特定的值位置,除此之外什么事情都不做:

// 重复读入数据直至达到文件末尾或者某次输入的值等于sought
while (cin >> s && s != sought)
    ; // 空语句

if或者while条件后面跟了一个额外的空语句可能表示循环体是空的,可能引发错误。

语句作用域

可以在ifswitchwhilefor语句的控制结构内定义变量。定义在控制结构中的变量只在相应语句的内部内可见,一旦语句结束,变量也就超出其作用范围了。

如果其他代码也需要控制访问变量,则变量必须定义在语句的外部。

条件语句

1. if语句

2. switch语句

循环语句

1. while语句

while (condition)
    statement

2. 传统的for语句

for (init-statement; contidition; expression)
    statement

3. 范围for语句

C++11新标准引入了一种更加简单的for语句,用于遍历容器或者其他序列的所有元素:

for (declaration : expression)
    statement

do while语句

do while语句和while语句基本一致,唯一的区别在于不管条件的值如何,do while都会至少执行一次循环:

do
    statement
while (condition);

跳转语句

1. break语句

break语句只能出现在迭代语句或者switch语句内部,负责终止离它最近的whiledo whileforswitch语句。

2. continue语句

continue终止最近的循环中的当前迭代并立即开始下一次迭代。

3. goto语句

goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句,不推荐在程序中使用goto语句,因为它使得程序又难理解又难修改

try语句和异常处理

异常处理机制为程序中异常检测和异常处理这两部分的协作提供支持,在C++语言中异常处理包括:

1. throw表达式

举个例子,下面的程序把两个Sales_item对象相加,检查读入的记录是否是关于同一种书籍的,如果不是就输出一条信息然后退出:

// 检查两条数据是不是关于同一种书籍的
if (item1.isbn() != item2.isbn())
    throw runtime_error("Data must refer to same ISBN");
cout << item1 + item2 << endl;

上述例子抛出了一个runtime_error的对象,该异常会终止当前函数,并将控制权交给能处理该异常的代码

2. try语句块

try {
    program-statements
} catch (exception-declaration) {
    handler-statements
} catch (exception-declaration) {
    handler-statements
}

3. 标准异常

<stdexcept>定义的异常类:

exception             最常见的问题
runtime_error         只有在运行时才能检测出来的问题
range_error           运行时错误:生成的结果超出了有意义的值域范围
overflow_error        运行时错误:计算上溢
underflow_error       运行时错误:计算下溢
logic_error           程序逻辑错误
domain_error          逻辑错误:参数对应的结果值不存在
invalid_argument      逻辑错误:无效参数
length_error          逻辑错误:试图创建一个超出该类型最大长度的对象
out_of_range          逻辑错误:使用一个超出有效范围的值
上一篇 下一篇

猜你喜欢

热点阅读