博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[c++primer][06]语句
阅读量:4326 次
发布时间:2019-06-06

本文共 2633 字,大约阅读时间需要 8 分钟。

6.1 简单语句

无关的空语句并非总是无害的。

 

6.2 声明语句

6.3 复合语句

也称为块,是用一对花括号括起来的语句序列。块标识了一个作用域,一个名字只从其定义处到该块的结尾这段范围内可见。

6.4 语句作用域

在语句的控制结构中定义的变量,仅在定义它们的块语句结束前有效。

6.5 if语句

类类型能否用在条件表达式中取决于类本身。IO类型可以用作条件,vector和string类型一般不可用作条件。

悬垂else

默认地,else匹配给最后出现的尚未匹配的if子句。

代码风格

总是在if语句后使用花括号是一个比较好的做法

6.6 switch语句

使用switch语句

实际上,程序从匹配的case标号开始,并跨越case边界继续执行其他语句,直到switch结束或遇到break语句为止。

最好在每个case标号后面提供一个break语句。

允许程序向下执行多个case标号,可以这么写:

 

case标号必须是整型常量表达式,否则会编译错误;如果两个case标号具有相同的值,同样也会导致编译时的错误。

如需要为某个特殊case定义变量,可以引入块语句,在块语句中定义变量,从而保证这个变量在使用前被定义和初始化。

default标号

哪怕没有语句要在default标号下执行,定义default标号仍然是有用的,表明该情况考虑到了。

如果switch结构以default标号结束,而且default分支不需要完成任何任务,那么该标号后面必须有一个空语句。

6.7 while语句

数组内容复制

 

6.8 for循环语句

for(initializer; condition; expression)    statemant

for语句头定义的对象只在for循环体里可见;可在for语句的initializer中定义多个对象,但该处只能出现一个语句,因此所有对象必须为同一类型。

6.9 do while语句

do   statementwhile(condition);  //注意,以分号结束

任何在循环条件中引用的变量都必须在do语句之前就已经存在。

6.10 break语句

break只限用于switch或循环语句中,用以跳出最内层的switch或循环语句

6.11 continue语句

用于使最近的循环语句当次迭代提前结束,继续求解循环条件;

对于for循环,程序流程接着求解for语句中的expression表达式。 

6.12 goto语句

提供了函数内部的无条件跳转,不建议使用。

6.13 try块和异常处理

异常机制提供程序中错误检测与错误处理部分之间的通信。C++的异常处理有:

1)throw表达式,错误检测部分用该表达式来说明遇到不可处理的错误,throw引发了异常条件;

2)try块,错误处理部分使用它来处理异常。以try开始,并以一个或多个catch子句结束。try块中执行的代码所抛出的异常,会被其中一个catch子句处理,catch子句也称为处理代码

3)由标准库定义的一组异常类,用来在throw和相应的catch之间传递有关错误信息。

try块

以下,假设标准输入检查输入的数字不能为0

#include 
#include
using namespace std;int main(){ int val; cout << "Enter a number(not 0):"; while(cin >> val){ try{ if(!val){ throw runtime_error("wrong,it's zero !"); } cout << "ok !" << endl; } catch (runtime_error err){ cout << err.what() <<"\nTry Again? Enter y or n " << endl; char c; cin >> c; if(cin && c=='n') break; } } return 0;}

函数在寻找处理代码的过程退出

复杂系统中,可能存在try嵌套调用,寻找处理代码的过程与函数调用链刚好相反。如果没有找到相应的处理代码,按执行路径回退,直到找到适当类型的catch为止。

如果不存在处理该异常的catch子句,程序跳转到terminate函数执行,它的执行导致程序非正常退出;

在程序中出现的异常,如果没有经过try块定义,发现异常时系统将自动调用terminate终止程序的执行。

标准异常

6.14 使用预处理器进行调试

NDEBUG预处理变量

默认情况下,NDEBUG未定义,程序处于debug状态,有以下两种情况:

1)开发过程执行的调试代码

#ifndef NDEBUGcout << “debug info” << endl;#endif  //#ifndef 和 #endif之间的代码默认执行

2)assert(断言)宏在头文件cassert中定义,用来测试“不可能发生”的条件

assert (expr);

如果表达式为true,assert不做任何操作,若表达式为false,assert输出信息并终止程序的执行

当使用 -DNDEBUG 命令行选项定义NDEBUG时,或在程序开头提供#define NDEBUG预处理命令,以上两种调试语句都不会执行。

预处理器定义的几个常量

_ _FILE_ _    name of the file.

_ _LINE_ _   current line number.
_ _TIME_ _   time the file was compiled.
_ _DATE_ _  date the file was compiled.

_ _ func_ _   name of the function

转载于:https://www.cnblogs.com/itree/p/4805970.html

你可能感兴趣的文章
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-8.用户模块开发之保存微信用户信息...
查看>>
Linux下Nginx安装
查看>>
LVM扩容之xfs文件系统
查看>>
Hbase记录-client访问zookeeper大量断开以及参数调优分析(转载)
查看>>
代码片段收集
查看>>
vue-cli3创建项目时报错
查看>>
输入1-53周,输出1-53周的开始时间和结束时间
查看>>
实验二
查看>>
shell——按指定列排序
查看>>
crash 收集
查看>>
507 LOJ 「LibreOJ NOI Round #1」接竹竿
查看>>
UI基础--烟花动画
查看>>
2018. 2.4 Java中集合嵌套集合的练习
查看>>
精通ASP.NET Web程序测试
查看>>
vue 根据不同属性 设置背景
查看>>
51Nod1601 完全图的最小生成树计数 Trie Prufer编码
查看>>
Codeforces 1110D. Jongmah 动态规划
查看>>
android驱动在win10系统上安装的心酸历程
查看>>
优雅的程序员
查看>>
oracle之三 自动任务调度
查看>>