=default和=delete之二

本文介绍了C++中的=default和=delete关键字的用法。=default用于编译器生成默认构造函数或拷贝控制成员,只能在编译器能合成的地方使用,并且在声明时指定,默认为内联。=delete则用于声明不可用的函数,可以应用于任何函数,一旦声明,编译器会在声明处生成函数定义,禁止任何方式的使用。
摘要由CSDN通过智能技术生成

c++ primer 5th上在讲到=default和=delete时,都是说的函数声明,不便于理解。可以按下面理解,认为编译器在=default和=delete出现的地方自动换为函数定义。

 

=default:

1,只能对编译器可以合成的默认构造函数或拷贝控制成员使用=default。

2,在声明时加上关键字=default。但是在编译代码时,显式让编译器在default关键字出现的地方生成合成的函数定义

     因此不能再自己定义,否则会出现重复定义错误。

     (1) 若在类内声明时指定default,则是内联的; 若在外部声明时指定,则是非内联的。

     因此c++ primer 5th P237“=default 既可以和声明一起出现在类的内部,也可以作为定义出现在类的外部”在理解上需要注意,在外部类定义外部是编译器把=default关键字换为函数的定义。

1, 只在类定义时声明为default. 编译器会在此进行定义函数。此时是内联的.
class base {
public:
    base() = default;
private:
    int a;
};

2, 在类定义时声明非default,在类定义外声明为default,编译器会在此进行定义函数. 此时不是内联.
class base {
public:
    base(); //首次声明
private:
    int a;
};
// ok. 编译器会在此进行定义
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值