如果初始值设定项列表顺序与类中的变量顺序不匹配,为什么gcc会发出嘶嘶声适合?
class myClass
{
public:
int A;
int B;
myClass();
};
myClass::myClass() :
B(1),
A(2)
{}
将导致:
file.h:274: warning: 'myClass::A' will be initialized after
file.h:273: warning: 'int myClass::B
file.cpp:581: warning: when initialized here
发出此类警告是否有任何特定原因?是否有与按类别定义的顺序不同的类别变量初始化相关的风险?
(请注意,有一个a question涉及到该主题,但是答案几乎是“因为它应该是这样”,而没有给出为什么应该订购它的任何理由,或者这是有问题的-我想知道为什么存在这样的限制-有人可以举例说明它可能适得其反吗?)
最佳答案
该警告试图防止出现您可能依赖于数据成员错误顺序的情况。假设您认为B在A之前被初始化,然后执行以下操作:
myClass::myClass() :
B(42), A(B) {}
在这里,您有 undefined 的行为,因为您正在从未初始化的
B
中读取。
关于c++ - 为什么初始化程序列表顺序必须与成员声明顺序匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59587039/