C++ 关键字小结

1. default

=default 一般会放在默认的构造函数,析构函数,拷贝构造函数,拷贝赋值函数,用来显示的表示需要编译器创造默认的上述几类函数。比如,用户如果写了自己的构造函数,那么编译器就不会创造默认的构造函数了,这有可能会带来编译错误。看如下的代码。

#include 
using namespace std;


class A{
public:
    A(int b){
        a = b;
    }

private:
    int a;

};

int main(){

    A a1; // 调用默认的构造函数
    A a2(1); // 调用用户自己创建的带参数的构造函数

    return 0;
}

编译上面的代码,会显示如下错误:

error: no matching function for call to ‘A::A()’

这表示编译器没有找到不带参数的默认构造函数,所以需要显式的人为加上,如下:

#include 
using namespace std;

class A{
public:
    A() = default;
    // A(){}
    A(int b){
        a = b;
    }
private:
    int a;
};

int main(){
    A a1; // 调用默认的构造函数
    A a2(1); // 调用用户自己创建的带参数的构造函数
    return 0;
}

2. delete

=delete 的作用和=default 有点相反,是显式的表示不用某个默认的函数。比如,有时候我们不想使用默认的拷贝构造函数,就可以写如下的代码。

#include 
using namespace std;

class A{
public:
    A() = default;
    A(int b){
        a = b;
    }

    A(const A&) = delete; // 不能使用默认的拷贝构造函数
private:
    int a;
};

int main(){
    A a1; // 调用默认的构造函数
    A a2(1); // 调用用户自己创建的带参数的构造函数
    A a3 = a1;
    return 0;
}

在执行A a3 = a1;时,程序就会报错,因为该行调用了默认的拷贝构造函数,报错信息如下:

error: use of deleted function ‘A::A(const A&)’

你可能感兴趣的:(C++,c++,开发语言)