Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55493
  • 博文数量: 23
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 267
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-19 10:32
文章存档

2014年(23)

我的朋友

分类: C/C++

2014-07-19 16:49:21

#include
using namespace std;
class Base
{
private:
    int m_i,m_j;
public:
    Base(int i):m_j(i),m_i(m_j){}
    Base():m_j(0),m_i(m_j){}
    int get_i()
    {
        return m_i;
    }
    int get_j()
    {
        return m_j;
    }
};
int main()
{
    Base obj(98);
    cout<     return 0;
}

上述代码的输出结果为

第一个get_i()的返回结果为什么不是98呢?这是由于初始化列表当中的初始化顺序是按照成员变量的声明顺序来初始化的。

虽然在初始化列表中,先对m_j(i),然后用m_i(m_j)初始化,但是由于初始化列表中的顺序是按照声明顺序来的,所以是先m_i后m_j,如此一来,m_i用未初始化的m_j来初始化,当然会出现随机值。

倘若将声明顺序换一下就行了。如下。

class Base
{
private:
    int m_j,m_i;
public:
    Base(int i):m_j(i),m_i(m_j){}
    Base():m_j(0),m_i(m_j){}
    int get_i()
    {
        return m_i;
    }
    int get_j()
    {
        return m_j;
    }
};

阅读(845) | 评论(0) | 转发(0) |
0

上一篇:迷途指针

下一篇:进程和线程的关系

给主人留下些什么吧!~~