C++11新特性之defaulted函数

news/2024/5/22 17:24:51

背景

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函数只能应用于类的特殊成员函数,且函数没有实参(包括默认实参),没有函数体。


http://lihuaxi.xjx100.cn/news/244483.html

相关文章

数据库创建索引的原则

数据库建立索引的原则 铁律一:天下没有免费的午餐,使用索引是需要付出代价的 索引的优点有目共睹,但是,却很少有人关心过采用索引所需要付出的成本。若数据库管理员能够对索引所需要付出的代价有一个充分的认识,也就不…

白话解析分布式系统,小白也能看懂

西方诗歌有云,无人是孤岛,你我心相系。今天,这句话同样适用于计算机。我们身边的服务器,个人电脑以及数据存储一直都在彼此通信。其实,我们每天使用的(和在开发的)应用和服务也都是构成完整系统…

简单在线购物商城

个人资源与分享网站:http://xiaocaoshare.com/ 1.所用技术: SpringBoot,java,mysql,html,css,js 2.

一个班37人考进清华北大,老师发来一则短信,家长都沉默了

不管成绩怎样,没有什么优生差生的区别。家长们知道,每一个小孩都是种子,只是每个人花期不同,有的花一开始,就绚丽绽放;而有的花, 却需要漫长的等待。  不要紧盯别人的花,不要觉得别…

导入导出Android手机文件

1、获得root权限:adb root; 如提示adbd cannot run as root in production builds,参见我的另一篇文章:http://www.cnblogs.com/hdk1993/p/4770388.html 2、设置/system为可读写:adb remount; 3、将文件复制…

Python:UTF-8编码转换成GBK编码

2019独角兽企业重金招聘Python工程师标准>>> #!/usr/bin/env python # -*- coding:utf-8 -*- #UTF-8转换成GBK编码 #temp #decode #encode #原理就是把UTF-8转换成万国码,再给万国码进行编码转换成GBK,在python 2.x里面这么用 ""&q…

在线自驾旅游平台

个人资源与分享网站:http://xiaocaoshare.com/ 1.开发语言 java,eclipse,jdbc,jsp,servlet 2.

关于 synchronizeOnSession

本文为[原创]文章,转载请标明出处。原文链接:https://weyunx.com/2019/01/22...原文出自微云的技术博客 最近在维护一个老项目,发现了一个问题。我们新增了一个耗时较久的复杂查询的功能,页面采用了 ajax 异步请求数据&#xff0c…