我正在尝试更好地理解构造函数在 C++ 中的工作方式。基本上,我想知道在构造函数中使用成员初始化列表初始化类时,是否一切都按顺序设置。
Constructor(int number1, int number2) :
m_number1(number1),
m_number2(m_number1 > 0 ? 0 : number2)
{
}
我希望这是一个有效的机制,但在某些特殊情况下它可能不起作用。
最佳答案
非静态成员初始化的顺序由它们在类定义中出现的顺序决定。这与这些成员在构造函数初始化列表中的列出顺序无关。
你的例子;
Constructor(int number1, int number2) : m_number1(number1), m_number2(m_number1 > 0 ? 0 : number2) { }
如果 m_number2
出现在类定义中的 m_number1
之前,将不会像您期望的那样工作。
如果类定义得到更新,依赖特定顺序可能会有风险 - 因为更新会改变非静态成员在类声明中出现的顺序(例如,如果某些团队成员决定成员更符合逻辑地分组在不同的方式)。
关于c++ - 我可以使用先前设置的变量来创建下一个类成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55510301/