C++关键字小结
- 游戏开发
- 2025-08-04 06:33:02

1. default
=default 一般会放在默认的构造函数,析构函数,拷贝构造函数,拷贝赋值函数,用来显示的表示需要编译器创造默认的上述几类函数。比如,用户如果写了自己的构造函数,那么编译器就不会创造默认的构造函数了,这有可能会带来编译错误。看如下的代码。
#include <iostream> 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 <iostream> 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 <iostream> 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&)’