Является ли неопределенным поведение инициализировать данные члена из других данных члена, объявленных после него? - PullRequest
6 голосов
/ 16 июня 2019

Если у меня есть класс, в котором объявлены два члена x_ и y_, так что x_ инициализируется с y_, а y_ имеет значение, тогда x_ имеет Undefined value?или что?

class Empl {
    public:
        int x_{ y_ };
        int y_{ 10 };
};

int main(){

    Empl e{};
    std::cout << e.x_ << ", " << e.y_ << std::endl;

}

Я попробовал пример на MSVC ++ 2105 и получил: 0 и 10, в то время как на GCC я получил 10 и 10!

Таким образом, в результатеэто неопределенное поведение, чтобы сделать это?

1 Ответ

7 голосов
/ 16 июня 2019

В результате чего это неопределенное поведение?

Да.Поведение чтения неопределенного значения не определено.В этом примере y_ имеет неопределенное значение, когда его значение используется для инициализации x_, поскольку оно инициализируется после x_.Он инициализируется после x_, потому что члены инициализируются в порядке объявления.

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