c11新标准之delete,default,override,final

  1. =default,代表使用编译器合成的函数,只有两类函数式编译器合成的。一是构造函数,二是拷贝函数。其中拷贝函数包括:拷贝构造函数,拷贝赋值重载符,析构函数。因为如果类自己实现了某个构造函数,那么编译器就不会为其合成构造函数,只有手动加上=default才行,比如:
class A{
    public:
        A(int a):a(a){}
        A(const A&)=default;
        A& operator=(const A&);
    private:
        int a;
    };

此时就无法通过A a(); 来创建A对象,因为编译器不会为其合成构造函数。采用下面的方法将可以完成。

class A{
    public:
        A()=default;
        A(int a):a(a){}
        A(const A&)=default;
        A& operator=(const A&);
    private:
        int a;
    };
    A& A::operator=(const A&)=default;//需要在类的外部再声明一次。

在上面的例子中,在类内用=default修饰的合成成员函数都是内联的,而在类外用=default修饰的合成成员函数不是内联的。

2.override
用于在派生类重新覆盖基类的虚函数时,如果在非虚函数后加上override将会报错。
3.final
在派生类覆盖的虚函数后面加上final将导致该派生类的派生类无法再去覆盖该虚函数了。
4.=delete
比如不想让某些可合成的成员函数被用户访问,以前的做法是将该函数定义为private的,比如默认拷贝构造函数。现在的做法只需要在该函数后面加上=delete,比如:

class A{
    public:
        A()=default;
        A(int a):a(a){}
        A(const A&)=delete;
        A& operator=(const A&);
    private:
        int a;
    };

但是析构函数不能加上=delete,如果析构函数被删除了就无法销毁此类型的对象了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值