c++ - 我可以使用先前设置的变量来创建下一个类成员吗?

标签 c++ constructor

我正在尝试更好地理解构造函数在 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/

相关文章:

C++ 将二进制数组转换为类

C++ 使用默认初始化的迭代器创建一个空的 std::string

java - 有人可以解释 Java 中的构造函数吗?

javascript 构造函数未正确绑定(bind)

Java URL 构造函数错误

java - 构造函数有很多元素。如何重构(工厂模式)

c++ - RSA可变加密长度

c++ - 将对象存储在 vector 中,编译器说元素不存在

c++ - 如果我将 C :\Program Files in 32 bit app on Win7 64 bit, 设置为 C 0x104567911,文件重定向不起作用,它是否应该导航到 (x86) 文件夹?

java - 构造函数和不同的数据类型令人困惑