首页 > 编程语言 > 详细

C++中成员变量的初始化顺序问题

时间:2021-08-01 18:02:19      阅读:12      评论:0      收藏:0      [点我收藏+]

以前没有注意到这些变量的初始化顺序问题,这虽然是个小问题但是也是一直容易被忽略的问题。

1、在使用构造函数的初始化列表初始化成员变量时,与初始化成员列表的顺序无关,只与定义成员变量的顺序有关。

class Test
{
public:
    Test() : m_b(2), m_a(m_b + 1) {}
    void showinfo() const
    {
        cout << "m_a=" << m_a << " " << "m_b=" << m_b << endl;
    }
    int m_a;
    int m_b;
};
void test01()
{
    Test p1;
    p1.showinfo();
}

运行结果

技术分享图片

 先执行m_a=m_b+1,而此时m_b并没有初始化。

2、如果不使用构造函数的初始化列表初始化,而是在构造函数内初始化时,此时初始化顺序与成员变量在构造函数中的位置有关。

class Test
{
public:
    Test()
    {
        m_b = 1;
        m_a = m_b + 2;
    }
    void showinfo() const
    {
        cout << "m_a=" << m_a << " " << "m_b=" << m_b << endl;
    }
    int m_a;
    int m_b;
};
void test01()
{
    Test p1;
    p1.showinfo();
}

运行结果

技术分享图片

 3、类中const成员常量必须在构造函数初始化列表中初始化,static成员变量必须在类外初始化。

class Test
{
public:
    Test():m_c(100)
    {
        m_b = 1;
        m_a = m_b + 2;
    
    }
    void showinfo() const
    {
        cout << "m_a=" << m_a << " " << "m_b=" << m_b <<" "
        <<"m_c="<<m_c<<" "<<"m_d="<<m_d<< endl;
    }
    int m_a;
    int m_b;
    const int m_c;
    static int m_d;
};
int Test::m_d = 0;
void test01()
{
    Test p1;
    p1.showinfo();
}

运行结果

技术分享图片

 

C++中成员变量的初始化顺序问题

原文:https://www.cnblogs.com/xiaoxiaolinux/p/15086539.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!