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

А>Здравствуйте, Аноним, Вы писали:


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


А>Двумя.


то есть перед началом вызова и после вызова?

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


А>Следующий фрагмент кода не работает.


он работает даже если тут UB, просто на всех компиляторах по-разному. И ИМХО нет тут никакого UB.
operator<< принимает один аргумент код эквивалентен серии вложенных вызовов operator<<
откуда здесь возмётся UB?

А>
А>>#include <iostream>

А>>int f(int i) { return i;}

А>>void main()
А>>{
А>>    int i = 0;
А>>    std::cout << f(i) << " " << f(i++) << " " << f(++i) << " " << f(i++) << std::endl;
А>>}
А>

А>>Или здесь UB?

А>Да.


А>>Почему?


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