Является ли этот код неопределенным поведением из-за обращения к внешнему элементу в первом цикле for? - PullRequest
0 голосов
/ 14 мая 2018

Является ли этот код неопределенным поведением из-за обращения к внешнему элементу в первом цикле for?

int main() {
    std::size_t length = 4;
    int* a = new int[length];

    for (std::size_t i = 0; i < length; )
        a[i] = ++i;
    for (std::size_t i = length - 1; i >= 0; i--) 
        std::cout << a[length - 1] << " ";
}

1 Ответ

0 голосов
/ 14 мая 2018

Если шрот, да, это так. В этой ситуации C ++ не определяет, в каком порядке должно вычисляться выражение, поскольку обе стороны имеют побочные эффекты. Таким образом, один компилятор может сначала вычислить левую сторону, а второй - вычислить с правой стороны. Но если вы посмотрите на это , вы обнаружите, что

a[i] = i++;       // undefined behavior until C++17

Итак, вы можете использовать эту строку, только если вы используете C ++ 17.

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