我有以下代码:
struct B
{
//B() {}
int x;
int y;
};
void print(const B &b)
{
std::cout<<"x:"<<b.x<<std::endl;
std::cout<<"y:"<<b.y<<std::endl;
std::cout<<"--------"<<std::endl;
}
int main()
{
B b1 = B(); //init1
B b2; //init2
print(b1);
print(b2);
return 0;
}
当我启动程序(vs2008,调试)时,我有以下输出:
x:0
y:0
--------
x:-858993460
y:-858993460
--------
如您所见,b1.x和b1.y的值为0。为什么? init1和init2有什么区别?
当我取消注释B构造函数时,我将得到以下输出:
x:-858993460
y:-858993460
--------
x:-858993460
y:-858993460
--------
有人可以解释这种行为的原因吗?
提前Tnx。
最佳答案
POD类型的默认构造函数将其填充为零。当您显式定义自己的构造函数时,您无需初始化x
和y
,您将获得随机值(在VS debug中,它们填充有确切值,但在发布时,它们将是随机值)。
根据C++ 03标准8.5/5:
B()
是临时值的初始化,将在b1
的拷贝初始化中使用。
在B b2
中,没有为对象指定初始化程序,因此根据C++ 03 Standard 8.5/9:
要获得b2
的零,您可以编写B b2 = {};
。