概述
之前我整理了两篇编译器合成的默认函数,这里介绍与合成的默认函数之间有些关系的关键字 default 和 delete。
1、default 函数
我们通过对函数定义为=default,来显式的要求编译器给 default 函数自动生成函数体。例:
class myclass
{
public:
myclass() = default;
myclass( int a )
{
m_i = a;
}
private:
int m_i;
}
需要注意的是:只能对具有合成版本的成员函数使用 =default (即,默认构造函数或拷贝控制函数),且该特殊成员函数没有默认参数。如:
class myclass
{
public:
int f() = default; //错误, 函数 f() 非类 myclass 的特殊成员函数
myclass(int, int) = default; //错误, 构造函数 myclass(int, int) 非 特殊成员函数
myclass(int = 1) = default; //错误, 默认构造函数 myclass(int=1) 含有默认参数
};
使用=default 修饰声明时,合成的函数将隐式地声明为内联的。如果不希望合成的函数是内联的,应该只对成员函数定义使用=default。如:
class myclass
{
public:
myclass() = d