• C++新特性 Type Alias, noexcept, override, final


     

    目录

     

    1 Type Alias 类型别名

    2 noexcept 不抛出异常

    3 override 改写

    4 final


    1 Type Alias 类型别名

    Type Alias的应用类似与typedef

    例1

     typedef void(*func)(int,int)与using func = void (*)(int,int)使用方法是一样的,但是typedef void(*func)(int,int)不能突显出func是一个函数指针,是函数的类型。而using func = void (*)(int,int)就可以突显出func是一个函数指针。func就可以当成一种类型,创建一个函数指针对象fn,接收example函数指针的赋值。

    例2

    using value_type = T,相当于typedef T value_type; 

     例3:Alias template 给模板起别名

     如图所示mystring只是较长模板的一个别名,使用起开更加整洁。

    其中例1和例2中的type alias类型别名的声明和typedef声明的作用是一模一样的,在使用type alias类型别名时,显得类型更加突出。类型别名的声明是通过using来实现的,另外using可以用来打开标准库,例如using namespace std和using std::count,using也可以为class引入其他class成员,如下图所示。

    2 noexcept 不抛出异常

    1. void foo() noexcept
    2. void foo() noexcept(true)

     上述两行代码的第一行,保证foo这个函数不会抛出异常,第二行的意思是,noexcept后括号里面为true才可以保证不抛出异常。

     上图swap函数不抛出异常,是在大的红色方框里为true,也就是小的红色方框里不要抛出异常,小的红色方框不抛出异常,就需要保证小的红色方框里的x.swap(y)为true.

    如上图所示,在我们实现的类里面涉及到移动语义的时候要使用noexcept,保证不抛出异常,否则别人在用这个类的时候担心会抛出异常。

    3 override 改写

    override应用在虚函数上,例如父类定义的虚函数

    virtual void vfunc(float){}

    我们在子类中进行改写时,写出如下所示的形式,下面所写是错误的,括号里面是float才叫重写,而这个错误一旦写出来我们就很难发现,除非在编译后才会察觉。我们在下述virtual void vfunc(int){}写成virtual void vfunc(int) override {},在编写程序的时候编译器会提示出int类型参数是错误的

    virtual void vfunc(int){}

    4 final

    我们在类的后面添加final关键字,将会导致这个类不可被继承。如下所示,Base1将不可被子类继承;

    struct Bas1 final{};

    我们在类的成员函数的后面添加final关键字,将会导致这个类不可被改写。如下所示,Base2的f()函数将不可被子类改写;

    1. struct Base2{
    2. virtual void f() final;
    3. }
    4. struct Derived:Base2{
    5. void f();//这里会被提示错误
    6. }

  • 相关阅读:
    Linux字符设备驱动
    GDP-海藻糖,5‘-鸟苷二磷酸岩藻糖,GDP-fucose ,CAS:15839-70-0
    2023年03月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试
    Android OpenGLES3.0 开发 :光照基础
    CentOS7 Soft RoCE v2
    负载均衡的原理和算法
    【物联网】常见电子元器件(电阻、电容、电感、二极管、三极管)综合,详细分析原理及其应用
    龙芯3A3000源码编译安装deepin-ide
    2022年TypeScript 最细项目实践:四步走高效改造现有的 JavaScript 项目实战
    Qt实现sdp组包,sdp策略介绍
  • 原文地址:https://blog.csdn.net/weixin_44387095/article/details/126348557