有人可以解释一下这段代码的用途。
class Point
{
private:
int x;
int y;
public:
Point(){}
void print(){
cout << x << " " << y << endl;
}
};
int main()
{
Point p;
p.print();
return 0;
}
如果我运行此代码,则输出为-858993460 -858993460对我来说是正常的。这是垃圾,因为我没有初始化我的2个属性。
这是奇怪的事情......
class Point
{
private:
int x;
int y;
int* buf;
public:
Point(){}
void print(){
cout << x << " " << y << " " << buf << endl;
}
};
int main()
{
Point p;
p.print();
return 0;
}
现在,我将int * buf作为新的类成员,当我运行此代码时,我的所有属性都被初始化为零。输出为0 0 00000000.我使用Visual Studio 2013,我不认为这种行为发生在Visual Studio 2010中。
有人可以解释背后的逻辑吗?
答案 0 :(得分:1)
您的班级成员永远不会被初始化为零,您需要在构造函数中自己执行此操作
class Point
{
private:
int x;
int y;
public:
Point():x(0), y(0) {}
void print(){
cout << x << " " << y << endl;
}
};
如果你的第二个例子中它们为零,那么它就是纯粹的巧合
答案 1 :(得分:0)
当您打印这些int
和int*
时,您正在打印分配这些内容之前的内存中的垃圾数据。请注意,您打印的buf
所持的地址不是指向它的值。打印*buf
可能会给您一个段错误。
-858993460是:11001100110011001100110011001100
这可能是Visual Studio 2010中的调试器默认内存位置,以警告您正在读取错误数据。
就2010年和2013年之间的差异而言,您可能不再在调试中运行,或者您在2013年的默认调试块写入仅为0。