无法初始化数据?
- W_Z_C
- 共 361 字,阅读约 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 一样。
特意查了一下标准文档的解释:
结论:代码大全啥的确实很重要,就像道德经一样,但是如果你在现实中不经历点坑是无法记住,无法体会的……