直接看实例,关键字 default 和 delete
class A
{
public:
A() = default;// 告诉编译器,即便有自定义构造,也要生成默认构造
A(int n){} //自定义构造
A(const A&) = delete;// 禁用拷贝构造
protected:
private:
};
default 所修饰的函数称为显式缺省函数
delete 所修饰的函数称为函数的删除函数
还可以利用delete限制隐式数据类型转换
class A
{
public:
A() = default;// 告诉编译器,即便有自定义构造,也要生成默认构造
A(int n){} //自定义构造 // 实例化:A a(1) 正常编译
A(char a){}=delete;// 实例化:A a('m') 无法编译通过
A(const A&) = delete;// 禁用拷贝构造
protected:
private:
};
当然,delete并不仅限于类成员函数中使用,还可以在普通函数中使用
void Func(int i){};
void Func(char c)=delete;
void main(){
Func(1);// 正常
Func('a');//编译失败
}