C++ struct

来源:百度知道 编辑:UC知道 时间:2024/05/16 15:55:33
struct x
{
x(int x, int y):rem(base), base(x){}
int rem ;
int base;
void put(ostream out)
{
out<<rem<<'\t'<<base<<endl;
}
}

int main()
{
x gen(5,3);
gen.put(cout);
return 0;
}
结果是-858993460 5
不是想要的结果
我知道可能的原因是因为需要快速处理,所以将base的值读入到寄存器中,因为初始值不定,从寄存器中直接读入,所以会这样。
需要加什么关键字?

这个应该和寄存器没有什么关系。
因为在struct中,初始化列表中的变量初始化的顺序是按在结构体中声明变量的顺序进行的。所以,程序会先把base的值赋给rem,再把x的值赋给base。问题在于,rem被初始化的时候base还没有被赋值,它的值是不确定的(即base所在内容地址处上次被某个程序遗留下的值,一般为不确定的数)。所以会出现-858993460这样的结果。
要改为你需要的结果,可以把rem和base的声明顺序改变一下(初始化列表中二者的顺序可改可不改),如下:
struct x
{
x(int x, int y):rem(base), base(x){}
int base;
int rem;
void put(ostream out)
{
out<<rem<<'\t'<<base<<endl;
}
}

int main()
{
x gen(5,3);
gen.put(cout);
return 0;
}
结果为:

x(int x, int y):rem(base), base(x){} 这个地方有问题
你还没有给base赋值 就让他给rem赋值 rem就是一个随机值
base就是x
输出的时候rem就是随机值
base就是5