C++11新特性之defaulted函数
背景
C++在类中有几个比较特殊的成员函数,如默认构造函数,析构函数等。如果程序员没有显式的定义一个特殊成员函数,在程序需要用到这些特殊成员函数时,编译器会隐式的为这个类生成一个默认的成员特殊函数。
这个默认生成的特殊成员函数会获得更高的代码执行效率
如下示例
class T { private: int apple; };
当我们执行以下操作时,因为没有定义构造函数,而t
定义时又需要构造函数,所以编译器会隐式的生成一个默认构造函数。这个默认生成的构造函数没有参数,并且包含空的函数体T::T(){}
,所以虽然没定义构造函数,但是还是可以编译通过
T t;
如果为类显示的定义了非默认构造函数,如下
class T { private: int apple; public: T(int banana) { apple = banana; } }
这时我们再执行以下操作,因为我们已经定义了一个非默认构造函数,所以编译器不会自动的为我们生成默认的构造函数,所以如下示例编译器会报错。
T t; // error, default constructor T::T() doesn't exist
如果我们显式的定义一个默认构造函数,那么原本由编译器完成的工作转移到我们程序员身上了。这无疑增大了程序员的工作,而且我们显式定义的默认构造函数的代码执行效率没有编译器生成的默认构造函数代码执行效率高
class T { private: int apple; public: T(){} T(int banana) { apple = banana; } }
Defaulted functions
基于以上几点原因,C++11标准引入了一个新特性,即defaulted函数
。只要在显式定义的默认构造函数后面加上=default
就可以了,如下
class T { private: int apple; public: T() = default; // 默认构造函数 T(int banana) { apple = banana; } }
这样编译器就会自动生成默认构造函数T::T(){}
,从而获得更高的代码执行效率。
Note
defaulted函数
只能应用于类的特殊成员函数,且函数没有实参(包括默认实参),没有函数体。
原文地址:https://segmentfault.com/a/1190000005177712
相关推荐
-
一个有趣的算法问题:如何定义一个分数类 c/c++
2019-3-29
-
最佳实践 | 源码升级gcc c/c++
2019-3-29
-
GacUI的中文教程就写在这里了 c/c++
2019-4-1
-
Qt的内存管理机制 c/c++
2019-5-22
-
简易内存分配器的实现 c/c++
2019-6-30
-
什么是编程的基本功? c/c++
2019-3-28
-
基于MARS的移动APP网络通信开发实践 c/c++
2019-3-28
-
STL二级空间配置器 c/c++
2019-3-28
-
谈谈网络游戏中的延迟解决方案 c/c++
2019-10-7
-
Win7的话,可能有十种简单的方法进行提速呢 c/c++
2019-10-7