zoukankan      html  css  js  c++  java
  • [c++primer][06]语句

    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
      statement while(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 <iostream>
    #include <stdexcept>
    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()
                    <<"
    Try 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 NDEBUG
    cout << “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

  • 相关阅读:
    七大排序的个人总结2
    如何创建自定义的文件类型关联
    ajax原理,验证码生成原理
    读取同一文件夹下多个txt文件中的特定内容并做统计
    为已定图片加水印
    egrep -v "^#|^$"
    QSplashScreen无法背景透明的解决办法(强制StyleSheet生效)
    c++调用python
    Qt对话框_模态/非模态
    雷军:曾日写300个高质量帖 做互联网需7字诀
  • 原文地址:https://www.cnblogs.com/itree/p/4805970.html
Copyright © 2011-2022 走看看