Re[3]: sequence point (по мотивам инкремента)
От: Аноним  
Дата: 04.06.04 07:25
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>>>Из стандарта, я понял, что вызов функции является sequence point.

А>>Двумя.
А>то есть перед началом вызова и после вызова?

После вычисления аргументов и после копирования возвращаемого значения.

А>>>Если это так, объясните мне, как работает следующий фрагмент кода:

А>>Следующий фрагмент кода не работает.
А>он работает даже если тут UB, просто на всех компиляторах по-разному.

В том числе компилятор может, например, прервать трансляцию с выдачей диагностического сообщения.

А>И ИМХО нет тут никакого UB.

А>operator<< принимает один аргумент код эквивалентен серии вложенных вызовов operator<<
А>откуда здесь возмётся UB?

Уже было сказано, откуда:

А>>Потому, что переменная i модифицируется более одного раза между двумя соседними точками следования.


Давайте по порядку.

    f(i++) + f(i++);

Понятно, почему здесь UB?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.