Skip to content
On this page

CPP_default关键字


标签:CPP/面向对象  

= default 可以用于以下几种成员函数的声明:

  1. 默认构造函数:

    cpp
    class MyClass {
    public:
        MyClass() = default;  // 默认构造函数
    };
  2. 拷贝构造函数:

    cpp
    class MyClass {
    public:
        MyClass(const MyClass&) = default;  // 拷贝构造函数
    };
  3. 拷贝赋值运算符:

    cpp
    class MyClass {
    public:
        MyClass& operator=(const MyClass&) = default;  // 拷贝赋值运算符
    };
  4. 移动构造函数:

    cpp
    class MyClass {
    public:
        MyClass(MyClass&&) = default;  // 移动构造函数
    };
  5. 移动赋值运算符:

    cpp
    class MyClass {
    public:
        MyClass& operator=(MyClass&&) = default;  // 移动赋值运算符
    };

需要注意的是,= default 只能用于上述成员函数的声明。对于其他成员函数(如析构函数、成员函数、友元函数等),不能使用 = default 来声明默认生成。默认情况下,如果你没有显式提供它们的定义,编译器会自动生成它们的默认实现。

此外,当你添加了自定义构造函数或析构函数时,编译器将不会自动生成默认构造函数,除非你使用 = default 明确指示编译器生成它。而对于其他成员函数(如拷贝构造函数和拷贝赋值运算符),即使你没有显式定义,编译器也会自动生成默认实现。

同时在声明中添加 = default 又在外部定义相当于重复定义,编译器报错。因此,从某些程度上,起到了和 overwirte 关键词差不多的作用:让头文件更容易理解。

Last updated: