主页 > 游戏开发  > 

C++关键字小结


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&)’

标签:

C++关键字小结由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++关键字小结