C++在类中有几个比较特殊的成员函数,如默认构造函数,析构函数等。若是程序员没有显式的定义一个特殊成员函数,在程序须要用到这些特殊成员函数时,编译器会隐式的为这个类生成一个默认的成员特殊函数。c++
这个默认生成的特殊成员函数会得到更高的代码执行效率程序员
以下示例app
class T { private: int apple; };
当咱们执行如下操做时,由于没有定义构造函数,而t
定义时又须要构造函数,因此编译器会隐式的生成一个默认构造函数。这个默认生成的构造函数没有参数,而且包含空的函数体T::T(){}
,因此虽然没定义构造函数,可是仍是能够编译经过函数
T t;
若是为类显示的定义了非默认构造函数,以下code
class T { private: int apple; public: T(int banana) { apple = banana; } }
这时咱们再执行如下操做,由于咱们已经定义了一个非默认构造函数,因此编译器不会自动的为咱们生成默认的构造函数,因此以下示例编译器会报错。编译器
T t; // error, default constructor T::T() doesn't exist
若是咱们显式的定义一个默认构造函数,那么本来由编译器完成的工做转移到咱们程序员身上了。这无疑增大了程序员的工做,并且咱们显式定义的默认构造函数的代码执行效率没有编译器生成的默认构造函数代码执行效率高io
class T { private: int apple; public: T(){} T(int banana) { apple = banana; } }
基于以上几点缘由,C++11标准引入了一个新特性,即defaulted函数
。只要在显式定义的默认构造函数后面加上=default
就能够了,以下编译
class T { private: int apple; public: T() = default; // 默认构造函数 T(int banana) { apple = banana; } }
这样编译器就会自动生成默认构造函数T::T(){}
,从而得到更高的代码执行效率。function
defaulted函数
只能应用于类的特殊成员函数,且函数没有实参(包括默认实参),没有函数体。class