Каждая сторона условного оператора является выражением запятойC++

Программы на C++. Форум разработчиков
Anonymous
Каждая сторона условного оператора является выражением запятой

Сообщение Anonymous »


В следующем примере каждая сторона условного оператора является выражением запятой. Значение первого выражения запятой - IX; Значение второго равно 0. < /p>

Код: Выделить всё

int ival = (ia != 0)
? ix = get_value(), ia[index] = ix
: ia = new int[sz], ia[index] = 0;
< /code>
< /blockquote>
Источник: C ++ Primer, третье издание, 26 марта 1998 г. < /p>
Что на самом деле происходит? Тройный оператор ?: 
имеет более высокий приоритет, чем оператор запятой, . Следовательно, все тройное выражение заканчивается при ia [index] = ix . Все после следующей запятой (

Код: Выделить всё

ia[index] = 0
) больше не является частью тройного выражения. Это то, что видит компилятор: < /p>
int ival = ((ia != 0)
? (ix = get_value(), ia[index] = ix)
: (ia = new int[sz])) ,
ia[index] = 0;
< /code>
Я нашел ошибку в книге? Или так кажется? Пожалуйста, проверьте, правильно ли это.


Подробнее здесь: https://stackoverflow.com/questions/796 ... expression

Вернуться в «C++»