博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造函数初始化列表tips
阅读量:6302 次
发布时间:2019-06-22

本文共 1594 字,大约阅读时间需要 5 分钟。

构造函数初始化列表tips构造函数初始化列表是许多相当有经验的C++程序员都没有掌握的一个特性一、构造函数初始化列表的重要功能a)构造函数初始化列表示例如下:CHost::CHost(const string &url): m_url(url), m_ulFailCnt(0){    .....}b)普通的构造函数内部初始化如下:CHost::CHost(const string &url){    m_url = url;    m_ulFailCnt = 0;    ....}构造函数初始化列表其实有一个重要的功能----对变量是对象进行构造函数的初始化对于a)中,m_url在构造函数的函数体执行前,m_url用url进行了string构造函数的初始化,也就是m_url做了string::string(url),带参数的string类构造函数。对于b)中,m_url在构造函数的函数体执行前,仅仅是执行了m_url的string::string()这样的初始化(string类的默认构造函数), 然后在构造函数体内再次执行了string类的"="操作符运算m_url = url;如下:CHost::CHost(const string &url): m_url(url)//这里执行了string::string(url)的构造函数, m_ulFailCnt(0){    .....}b)普通的构造函数内部初始化如下:CHost::CHost(const string &url)//这里执行了string::string()默认的构造函数{    m_url = url;//这里执行了string的“=”操作符运算    m_ulFailCnt = 0;    ....}这里不谈效率,需要关注:对于类成员是1)const类型; 2)类对象,且类无默认构造函数; 以上这两种情况必须使用构造函数初始化列表。不然肯定编译不过。二、初始化列表的顺序问题class CUser{....private:    string m_strPassword;    string m_strUsername;    bool m_bTcpFlag;};CUser::CUser(string strUserName, string strPassword, bool bTcpFlag): m_strUsername(strUserName), m_strPassword(strPassword), m_bTcpFlag(bTcpFlag){}初始化列表的顺序只由类声明中的顺序而定,跟初始化列表中的顺序无关。因此CUser的初始化顺序是:m_strPassword;m_strUsername;m_bTcpFlag;提示:若是初始化列表顺序与类声明顺序不一致,就会导致编译器报warning,消除warning的办法,就请按照声明的顺序来排列初始化列表吧。编译时的warning主要为了防止如下事故:class X{public:    X(int iVal):j(iVal), i(j)//运行时错误,因为i在j前声明,所以i(j)先执行。    {    }private:    int i;    int j;};三、初始化列表对基类构造函数的操作CHost::CHost(const string &url): CBaseHost(url)/*这里执行基类的构造函数CBaseHost::CBaseHost(string), 而不是默认构造函数*/, m_url(url), m_ulFailCnt(0){    .....}

转载于:https://www.cnblogs.com/runner42/archive/2013/01/07/2848961.html

你可能感兴趣的文章
集合(Collection)与迭代器(Iterator)
查看>>
jQuery制作无缝轮播效果
查看>>
内置常量
查看>>
C++虚函数表解析
查看>>
从1输出n位数字
查看>>
性能、负载、压力测试区别
查看>>
sharepoint 2010 内容数据库大小估算
查看>>
简单安装Oracle网格控制器agent端
查看>>
走差异化发展路线思想
查看>>
linux下批量修改文件名精彩解答案例分享
查看>>
Android应用开发以及设计思想深度剖析(1)
查看>>
库存分配
查看>>
VDI序曲三十 APP-V4.6SP1之OFFICE07补丁升级
查看>>
LoadRunner在移动端性能测试的应用
查看>>
Linux启动流程和grub详解
查看>>
Redis主从配置
查看>>
linux内核参数注释与优化
查看>>
Python 如何理解又晕又好用的装饰器
查看>>
linux之nohup命令
查看>>
稳扎稳打 Silverlight 4.0 教程
查看>>