The initialize list of C++ Class

性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表

    • 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面
    • Error1(constchar* constmsg) :data(msg)

      {

      //data = msg;

      }

    • 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
    • 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
    •  classError2

      {

      constchar* const data;

      public:

      Error2(constchar* constmsg = 0) :data(msg){}//Error2()

      };

      classError1

      {

      constchar* const data;

      Error2 e2;

      public:

      Error1(constchar* constmsg=0) :data(msg)

      {

      // e2 = e2Out;

      //data = msg;

      }

      //Error1(const char* const msg = 0) :data(msg){}

      Error1(constchar* constmsg, Error2 & e2Out) :data(msg), e2(e2Out)

      {

      //e2 = e2Out;

      //data = msg;

      }

      };

      if not, there will be a waring,
      • 但是对于类类型来说,最好使用初始化列表,为什么呢?由上面的测试可知,使用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。同样看上面的例子,我们使用初始化列表来实现Test2的构造函数
        struct Test2
        {Test1 test1 ;Test2(Test1 &t1):test1(t1){}
        }
    • 使用同样的调用代码,输出结果如下。

      第一行输出对应 调用代码的第一行。第二行输出对应Test2的初始化列表,直接调用拷贝构造函数初始化test1,省去了调用默认构造函数的过程。所以一个好的原则是,能使用初始化列表的时候尽量使用初始化列表。  

转载于:https://www.cnblogs.com/gaoxianzhi/p/4440136.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PYTHON--定期监测服务器端口,并将结果写入MYSQL

定时监测服务器端口,然后将结果入写数据库。 监测用NC命令,入库就用PYTHON的MYSQL模块 再调一个基于函数的多线程。。。 妥妥的。。 是网上两个功能的合成。。 俺不生产代码,俺只是BAIDU的搬运工! #!/usr/bin/env python import m…

MS_DOS头部 IMAGE_DOS_HEADER

MS_DOS头部 IMAGE_DOS_HEADER STRUCT{00H WORD e_magic ;DOS可执行文件标记字符串MZ(4D 5A)3CH DWORD e_1fanew ;指向PE文件头} IMAGE_DOS_HEADER ENDS用十六进制编辑器打开一个EXE文件 如QQ.EXEe_magic5A 4D e_1fanew00000100H---->此地址指向PE头文件

计算机原理学习(6)-- x86-32 CPU和内存管理之分页管理

前言 上一篇我们了解了x86-16 CPU计算机的内存访问方式,寻址方式,以及基于MS-DOS的应用程序的内存布局。这一篇会主要介绍32位处理器的内存访问,内存管理以及应用程序的内存布局。虽然目前64位CPU已经非常普及了,不过相对于32位的…

socket通信简介

前言 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠sock…

SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等。如果发生异常,需要提前预警的,通知形式一般为发邮件告知。 邮件作为一种非常便利的预警实现方式,在及时性和易用性方面也有…

So easy Webservice 1.Socket建设web服务

socket 是用来进行网络通讯的,简单来说,远程机器和本地机器各建一个socket,然后通过该socket进行连接通讯 socket简单模型图: socket的原理图: 代码实现: 1.创建socket服务端:用于处理客户端发送…

Java 自带MD5 校验文件

http://www.iteye.com/topic/1127319 前天第一次发表博客到论坛,关于Java文件监控一文,帖子地址在:http://www.iteye.com/topic/1127281 评论的朋友很多,下载代码的朋友很不少,感谢在论坛上看我帖子的朋友,…

决策树资料汇总

2012年8月26日决策树(Decision tree)决策树是以实例为基础的归纳学习算法。它从一组无次序、无规则的元组中推理出决策树表示形式的分类规则。它采用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,并根据不同的属性值从…

metasploitable2渗透测试

一、系统弱密码登录 1、在kali上执行命令行telnet 192.168.26.129 2、Login和password都输入msfadmin 3、登录成功,进入系统 4、测试如下: 二、MySQL弱密码登录: 1、在kali上执行mysql –h 192.168.26.129 –u root 2、登录成功&#…

Portainer.io:让容器管理变得更加直观

在现代软件开发和部署中,容器化技术已经变得越来越流行。Docker 是其中一种领先的容器化平台,而 Portainer.io 则是一个优秀的管理工具,使得 Docker 的使用变得更加简单和可视化。本文将介绍 Portainer.io 的基本功能和如何在 Docker 上安装和…

python开发的一些tips

1. Notepad编写python脚本 1)新建文件,编写代码 2)点击菜单栏,“语言”—>“P”—>“Python”,设置脚本为Python语言的高亮(这样保存文本的时候,Notepad也可以自动识别文件类型为.py&…

metasploitable3渗透测试

1、攻击windows服务器漏洞 用nmap对网段进行扫描nmap -sP 192.168.123 在进行IP扫描 发现Windows服务器漏洞 步骤: msfconsole---进入渗透模块

以前写的一个下载小说的工具

因为当时发现只有一个站点有。但是时时联网的要求太让人不爽。就写了一个给全下下来了。 用到了: 1. 正则表达式,分析章节和内容; 2. 线程池下载,并且对下载中的相关超时做了一些处理; 3. 文件生成与写入,注意格式问题…

数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)

我们来看一个灰度图像,让表示灰度出现的次数,这样图像中灰度为 的像素的出现概率是是图像中全部的灰度数, 是图像中全部的像素数, 实际上是图像的直方图,归一化到 。把 作为相应于 的累计概率函数, 定义为:是图像的…

Windows2008的安装

点击下一步 点击安装 选择第三个,点击下一步 点击下一步 点自定义安装 我在这里分两个盘并格式化 接下来就是等待安装完成即可

redhat linux7.0的安装

选择第一个 我选择中文 点击开始安装 设置root用户密码 完成如上图所示 我在网上找了一个redhat7.0镜像供大家使用 链接:https://pan.baidu.com/s/1WhG8BGZTZawDKTNlaAvzRg 提取码:uzpd

VMware虚拟机安装

创建新的虚拟机:在 VMWare 中创建虚拟机,要求设置内存大小为 1G,CPU 为 2,硬盘大小自行选择,网络连接采用 NAT 模式,其他保持默认即可 上面是安装啥系统就选啥系统 下一步 下一步 磁盘大小按自己需求来

二叉树算法:中序、后序推导先序(数组递归实现 【*模板】)

中根序列和后根序列重建二叉树 描述我们知道如何按照三种深度优先次序来周游一棵二叉树,来得到中根序列、前根序列和后根序列。反过来,如果给定二叉树的中根序列和后根序 列,或者给定中根序列和前根序列,可以重建一二叉树。本题输…

Windows主机安全加固

Windows主机安全加固 账户安全 更名administrator本地用户并禁用guest账户步骤: 点击“开始”,找到“管理工具”,点击里面的“计算机管理”,找到“本地用户和组”

JS笔记 入门第四

小测试:注意:取消所有的设定可以直接使用document.getElementById("txt").removeAttribute("style");这个是个神奇的东西.<!DOCTYPE HTML><html><head><meta http-equiv"Content-Type" Content"text/html; charsetutf…