+ -
当前位置:首页 → 问答吧 → 一下代码会输出0吗,为什么

一下代码会输出0吗,为什么

时间:2011-11-30

来源:互联网

struct CLS
{
  int m_i;
  CLS( int I ) : m_i(i) {}
  CLS()
  {
  CLS(0);
  }
};
CLS obj;
cout << obj.m_i << endl;

作者: jiangkai2008   发布时间: 2011-11-30

不会 
不会

作者: hnuqinhuan   发布时间: 2011-11-30

如果没猜错,不能通过编译

作者: mingliang1212   发布时间: 2011-11-30

CLS obj调用默认无参构造函数 但是无参构造函数里面显示调用构造函数 没有吧这个值赋值给当前的对象的变量 所以还是一个未初始化的值

作者: hnuqinhuan   发布时间: 2011-11-30

可能通过编译,但是不是你要的意思

作者: mingliang1212   发布时间: 2011-11-30

C/C++ code

struct CLS
{
    int m_i;
    CLS( int i ) : m_i(i) {}
    CLS()
    {
        CLS(0);//相当于在这儿是一个临时的变量 并不是给m_i赋值
    }
};

作者: hnuqinhuan   发布时间: 2011-11-30

引用 3 楼 hnuqinhuan 的回复:

CLS obj调用默认无参构造函数 但是无参构造函数里面显示调用构造函数 没有吧这个值赋值给当前的对象的变量 所以还是一个未初始化的值
++

作者: qwer_boo   发布时间: 2011-11-30

3楼正解。你可以这样:

CLS()
  {
  *this = CLS(0);
  }

作者: mingliang1212   发布时间: 2011-11-30