• 68 - 令人迷惑的写法


    ---- 整理自狄泰软件唐佐林老师课程

    1. 写法一

    下面的程序想要表达什么意思?
    在这里插入图片描述
    在这里插入图片描述

    1.1 历史原因

    早期的C++直接复用class关键字来定义模板
    但是泛型编程针对的不只是类类型
    class关键字的复用使得代码出现二义性

    1.2 typename诞生的直接诱因

    自定义类类型内部的嵌套类型
    不同类中的同一个标识符可能导致二义性
    编译器无法辨识标识符究竟是什么

    1.3 编程实验:模板中的二义性

    在这里插入图片描述
    在这里插入图片描述

    • typename的作用:
      • 在模板定义中 声明泛指类型
      • 明确告诉编译器其后的标识符为 类型

    2. 写法二

    下面的程序想要表达什么意思?
    在这里插入图片描述

    • try catch用于分隔正常功能代码与异常处理代码
    • try catch可以直接将函数实现分隔为2部分
    • 函数声明和定义时可以直接 指定可能抛出的异常类型
    • 异常声明成为函数的一部分可以提高代码可读性

    2.1 函数异常声明 的注意事项

    • 函数异常声明是一种与编译器之间的契约
    • 函数声明异常后就只能抛出声明的异常
      • 抛出其它异常将导致程序运行终止
      • 可以直接通过异常声明定义无异常函数

    2.2 编程实验:新的异常写法

    #include 
    #include 
    
    using namespace std;
    
    int func(int i, int j) throw(int, char)
    {
        if( (0 < j) && (j < 10) )
        {
            return (i + j);
        }
        else
        {
            throw '0';
        }
    }
    
    void test(int i) try
    {
        cout << "func(i, i) = " << func(i, i) << endl;
    }
    catch(int i)
    {
        cout << "Exception: " << i << endl;
    }
    catch(...)
    {
        cout << "Exception..." << endl;
    }
    
    int main(int argc, char *argv[])
    {
        test(5);
        
        test(10);
        
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述
    在这里插入图片描述

    3. 小结

    • class可以用来在模板种定义泛指类型(不推荐)
    • typename是可以消除模板中的二义性的
    • try catch可以将函数体分成两部分
    • 函数异常声明能够提高程序的可读性
  • 相关阅读:
    我的C#基础
    再谈GOF设计模式的设计原则
    基于OpenCV的人脸签到系统
    蓬莱小课:应届生,如何找到第一份心仪的数据分析工作?
    C++的extern关键字在HotSpot VM中的重要应用
    3D点云深度学习处理的基本概念
    match-sorter 插件
    从0开始学游戏开发
    Golang | Leetcode Golang题解之第7题整数反转
    php将在线远程文件写入临时文件
  • 原文地址:https://blog.csdn.net/weixin_36098975/article/details/128117767