• 第六章:语句


    switch:只能在最后一个 case 标号(无default) defaul 标号后定义变量:此规则是为了避免出现跳过变量的定义和初始化的情况。 如果需要为某个特殊的 case 语句定义变量,可引入块语句。

    异常机制:try 块和异常处理

    throw 表达式, try 块catch 子句(也称为处理代码),标准库定义的异常类

    	Sales_item item1,item2;
    	while(cin>>item1>>item2)
    	{
    	try
    	{
    		if(!item1.same_isbn(item2))
    			throw runtime_error("1.Data must refer to the same ISBN:");// 字符串初始化 runtime_error
    		cout<<item1+item2<<endl;
    	}
    	catch (runtime_error a) // 对象 a
    	{
    		cout<<a.what()  //返回 C 风格字符串(unsigned char* 类型值)
    			<<"\nTry Again? Enter y or n"<<endl;
    		char c;
    		cin>>c;
    		if(cin && c=='n')
    			break;
    	}
    	
    

    如果不存在处理该异常的 catch 子句,程序运行跳转到 terminate 的标准库函数,该函数在 exception 头文件中定义。然后通过调用 abort 来终止程序运行。

    通常系统出现异常,系统自动调用 terminate 来终止程序执行。

    1.使用 NDEBUG 预处理变量(其实任意变量都可以)实现有条件的调试代码:

    int main()

    {

    #ifndef NDEBUG

    cerr<<"start maining"<<endl;

    #endif

    //...

    }

    开发完成后,定义 NDEBUG 预处理变量,(有效地)删除这些调试语句。

    2.预处理器定义四种在调试时非常有用的常量:

    ——FILE—— ——LINE——

    ——DATE——

    ——TIME——

    View Code
    1     string word;
    2     cin>>word;
    3     if(word.size()<5);
    4             cerr<<"Error: "<<__FILE__
    5                 <<"  line: "<<__LINE__
    6                 <<"\nCompiled on "<<__DATE__
    7                 <<" at "<<__TIME__<<endl
    8                 <<"      Word read was \""<<word
    9                 <<"\" Length too short "<<endl;

    3.使用NDEBUG 预处理变量 及 assert 预处理宏。优秀参考:http://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html

    	string word;
    	cin>>word;
    	assert(word.size()<5);
    			cerr<<"Error: "<<__FILE__
    				<<"  line: "<<__LINE__
    				<<"\nCompiled on "<<__DATE__
    				<<" at "<<__TIME__<<endl
    				<<"      Word read was \""<<word
    				<<"\" Length too short "<<endl;
    

     最后在 #include<cassert> 之前加上 #define NDEBUG 来定义 NDEBUG,则 assert 语句不做任何工作,没有任何运行时代价,也不会引起任何运行时检查。当然,仅用于检查确实不可能发生的事情。

    标准异常:

    标准异常

    标准库异常类定义在以下四个头文件中

    exception、bad_alloc、bad_cast 类型只有默认构造函数。其他只有一个使用 string初始化的构造函数。

    1exception头文件:定义了最常见的标准异常类,其类名为exception

       只通知异常的产生,但不会提供更多的信息

    2stdexcept头文件定义了以下几种常见异常类

       类型                   说明

    exception            最常见的问题

    runtime_error      运行时错误:仅在运行时才能检测到的问题

    range_error         运行时错误:生成的结果超出了有意义的值域范围

    overflow_error     运行时错误:计算上溢

    underflow_error   运行时错误:计算下溢

    logic_error           逻辑错误:可在运行前检测到的问题

    domain_error        逻辑错误:参数的结果值不存在

    invalid_argument   逻辑错误:不合适的参数

    length_error         逻辑错误:试图生成一个超出该类型最大长度的对象

    out_of_range       逻辑错误:使用一个超出有效范围的值

    3new头文件定义了bad_alloc异常类型,提供因无法分配内存而由new抛出的异常

    4type_info头文件定义了bad_cast异常类型(要使用type_info必须包含typeinfo头文件)

  • 相关阅读:
    基于TMS320C6678、FPGA XC5VLX110T的6U CPCI 8路光纤信号处理卡
    KC705E 增强版 基于FMC接口的Xilinx Kintex7 FPGA K7 XC7K325T PCIeX8 接口卡
    基于Xilinx Kintex7 FPGA K7 XC7K325T PCIeX8 四路光纤卡
    IOS常用API
    数学和物理的公式
    [cocos2d]如何实现模态对话框
    使用加速器实现的定位算法
    cocos2d 粒子设计器
    陀螺仪操作摄相机,可以旋转,但角度(轴)还不对
    gluLookAt 的参数
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3071659.html
Copyright © 2020-2023  润新知