«
类的构造函数后跟 = default 和 = delete

时间:2024-9-6    作者:范文泉    分类:


在 C++11 中,= default 和 = delete 是两个特殊的函数声明符号,它们可以用于限定类的特殊函数的生成行为。

= default

先说 = default 关键字,它用于显式声明一些类的成员函数(默认构造函数、复制构造函数、移动构造函数、复制赋值运算符、移动赋值运算符、析构函数)使用编译器提供的默认实现。这样可以提高代码的可读性和可靠性,同时在编译器的优化下可为代码带来性能上的提升。当使用 = default 时,编译器将会自动生成合适的默认构造函数,而无需显式地定义它们。以下是一个示例:

class A
{
public:
    A() = default; // 显式声明默认构造函数
};

上述代码中,使用 = default 显式声明了A类的默认构造函数,此时编译器会自动生成一个默认的构造函数实现。

= delete

= delete 关键字用于删除类的特殊函数,起到防止在类中被显式调用的作用,也可以用来定义特定情况下的语法错误。以下是一个示例:

class B
{
public:
    B(const B&) = delete; // 删除复制构造函数
    void operator=(const B&) = delete; // 删除赋值运算符
};

上述代码中,使用 = delete 删除了类B的复制构造函数和赋值运算符的定义。这意味着该类的对象不能被进行对象之间的复制,并且对象重载赋值运算符的情况下将报错。

总之,= default 和 = delete 是 C++11 中的两个特殊的函数声明符号,可用于显式声明生成函数和解除其使用,以提高代码的可读性、性能和安全性。它们的使用需要根据实际情况进行考虑,谨慎使用。