C/C++在构造函数中对成员变量初始化的两种方式

今天看到一个构造函数,一下子有点懵了,今天就来复习构造函数为成员变量赋值的两种方式吧。

CProtocol::CProtocol(UINT32 dwType) : m_dwType(dwType)
{
    m_message = NULL;
    m_sessionID = 0;
    m_debug = false;
    m_Compress = false;
}

首先要了解的是初始化成员变量的两种方式:

class A{
public:
    int m_a;
    int m_b;
    A(int a,int b);

}
//采用初始化列表
A:A(int a,int b):m_a(a),m_b(b){

}
//采用构造函数内赋值
A:A(int a,int b){
    m_a = a;
    m_b = b;
}

可以看到成员变量初始化的两种方式:采用初始化列表/采用构造函数内赋值的方式是比较明显的。而前面我们看到的就是这两种形式一起用的一种场景。

要注意的是,成员变量的初始化顺序与初始化列表中列出的变量的顺序无关,它只与成员变量在类中声明的顺序有关。请看代码:

A:A(int b):m_b(b),m_a(m_b){

}
//运行结果: 2130567168, 100

可以看到的是,虽然从初始化列表的顺序是b先赋值给m_b然后m_b赋值给m_a。但初始化列表初始化的顺序是和声明的顺序有关的,实际上是m_a先被为赋值的m_b初始化了。

原文链接: https://www.cnblogs.com/doggod/p/13359598.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/200712

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午8:31
下一篇 2023年2月12日 下午8:31

相关推荐