• 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. }

  • 相关阅读:
    Ubuntu 2204 搭建 nextcloud 个人网盘
    Shiro与web的整合
    基础算法之背包
    k8s--基础--22.7--storageclass--类型--vSphere
    向量数据库Pinecone,治疗ChatGPT幻觉的药方?
    system V共享内存【Linux】
    分享一个Linux的录屏工具script
    【QT】QT6.3新特性,以及使用技巧
    基于Android studio的个人日程时间管理系统java
    设计模式之【建造者模式】
  • 原文地址:https://blog.csdn.net/weixin_44387095/article/details/126348557