没事造轮子没事造轮子

没事造轮子

无法初始化数据?

  • W_Z_C
  • 阅读约 1 分钟
无法初始化数据?

今天在代码中发现一个奇怪的现象,抽取问题模拟代码如下:

class T
{
public:
	T() : b(0), a(b) {}

public:
	int a;
	int b;
};


int main()
{
	T t;
	std::cout << t.a << " " << t.b << std::endl;
}

想象中应该输出两个零,但是再次被现实打脸!其实问题发生后排查很容易,只不过这个问题其实并不经常发生,所以没有特别注意,这里再次验证了一个真理:“定义顺序最好和初始化列表顺序一致” 。

大部分时候,初始化列表的顺序无关紧要,但是假如初始化列表中的值存在相互依赖的问题,那就需要注意了,就像代码中 a 的值依赖 b 一样。

特意查了一下标准文档的解释:

C++标准文档

结论:代码大全啥的确实很重要,就像道德经一样,但是如果你在现实中不经历点坑是无法记住,无法体会的……