关于内部含计算的结构体的赋值和初始化
问题产生
今天被问到一个含计算的结构体的问题,一时没转过来。结构体类似于:
struct StrA
{
int a;
int b;
int c = a + b;
};
调试过程就不说了,最终发现实际上是赋值和初始化的问题。即
StrA stra;
stra.a = 10;
stra.b = 20;
std::cout << "c1 = " << stra.c << std::endl;
StrA strb{ 10,20 };
std::cout << "c2 = " << strb.c << std::endl;
二者结果不一致的问题。
结果分析
上述结果为:
原因是stra中a,b是赋值产生的,而c在初始化的时候就已经完成了计算。即通过a和b的初始化值计算得到了c,再将a和b分别赋值为10和20.
strb中,是直接初始化了a =10, b =20,然后计算了c,因此得到想要的结果。
回头来看,就是初始化和赋值的操作问题,但是在结构中做计算实在不是明智之举,所以造成的困扰也不易察觉。以此记录,以示后人。