C/C++教程

C++11 标准新特性:Defaulted 和 Deleted 函数

本文主要是介绍C++11 标准新特性:Defaulted 和 Deleted 函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C++11 标准新特性:Defaulted 和 Deleted 函数 (转)

C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。

=default

程序员只需在函数声明后加上“=default;”,就可将该函数声明为 defaulted 函数,编译器将为显式声明的 defaulted 函数自动生成函数体。例如:

class X{ 
public: 
 X()=default; 
 X(int i){ 
   a = i; 
 }     
private: 
 int a; 
}; 
 
X x;

编译器会自动生成默认构造函数X::X(){},该函数可以比用户自己定义的默认构造函数获得更高的代码效率。

=delete

程序员只需在函数声明后加上“=delete;”,就可将该函数禁用。

虽然只显式的禁用了一个拷贝构造函数和一个拷贝赋值操作符,但是由于编译器检测到类X存在用户自定义的拷贝构造函数和拷贝赋值操作符的声明,所以不会再隐式的生成其它参数类型的拷贝构造函数或拷贝赋值操作符,也就相当于类X没有任何拷贝构造函数和拷贝赋值操作符,所以对象间的拷贝和赋值被完全禁止了。

class X{            
     public: 
       X(); 
       X(const X&) = delete;  // 声明拷贝构造函数为 deleted 函数
       X& operator = (const X &) = delete; // 声明拷贝赋值操作符为 deleted 函数
     }; 
 
 int main(){ 
  X x1; 
  X x2=x1;   // 错误,拷贝构造函数被禁用
  X x3; 
  x3=x1;     // 错误,拷贝赋值操作符被禁用
 }
这篇关于C++11 标准新特性:Defaulted 和 Deleted 函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!