Могу ли я использовать ранее установленную переменную для создания следующего члена класса? - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь лучше понять, как работают конструкторы в C ++. В основном, я хотел бы знать, если при инициализации класса со списком инициализатора члена в конструкторе все будет в порядке.

Constructor(int number1, int number2) : 
            m_number1(number1),
            m_number2(m_number1 > 0 ? 0 : number2)
{
}

Я ожидаю, что это будет действительный механизм, однако, возможно, в некоторых особых случаях он не работает.

1 Ответ

1 голос
/ 04 апреля 2019

Порядок инициализации нестатических элементов определяется порядком их появления в определении класса. Это не связано с порядком, в котором эти члены перечислены в списке инициализатора конструктора.

Ваш пример;

Constructor(int number1, int number2) : 
        m_number1(number1),
        m_number2(m_number1 > 0 ? 0 : number2)
{
}

не будет работать так, как вы ожидаете, если m_number2 появится раньше m_number1 в определении класса.

Полагаться на определенный порядок может быть рискованно, если обновление класса обновляется - поскольку обновления могут изменить порядок, в котором нестатические члены появляются в объявлении класса (например, если какой-либо член команды решает, что члены более логически сгруппированы в разными способами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...