读书人

为什么输出结果不是0解决办法

发布时间: 2012-03-27 13:44:24 作者: rapoo

为什么输出结果不是0
#include <iostream >
#include <cstdio >
using namespace std;
struct CLS
{
int m_i;
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
};
int main()
{
CLS obj;
cout << obj.m_i << endl;
return 0;
}

输出结果为一个奇怪的数字,为什么不是0?
希望各位指教!谢谢!

[解决办法]
你在构造里在去构造一个局部变量??

在看下构造函数的作用
struct CLS
{
int m_i;
CLS( int i ) : m_i(i) {}
CLS() : i(0)
{
}
};
[解决办法]
不错的题目!
ckt1120的回答可能比较含糊。

错误的原因如下:
1. 构造函数不能够显示的调用,因为编译器对构造函数的处理比较特别。
2. 像CLS(0);其实是创建了一个新的对象,你单步执行一下,察看一下this指针就可以发现,this的值改变了。

ckt1120提出的方法是比较好的解决方法,应避免构造函数的嵌套调用。
[解决办法]
一个对象只会调用一次构造函数
[解决办法]
构造不能嵌套调用,*this指针指向的对象变了
[解决办法]
你new一个对象就可以了~~~~~

读书人网 >C++

热点推荐