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 不抛出异常

void foo() noexcept
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()函数将不可被子类改写;

struct Base2{
    virtual void f() final;
}

struct Derived:Base2{
    void f();//这里会被提示错误
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Finish_all

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值