|
Павел-Kikoz
> Кстати, RomanPshenichny утверждает, что "этот код
> аналогичен func ( func ( func (0, i), i++ ), i);"
cout << i << i++ << i, это:
( ( (cout::operator << (i) )::operator << (i++) )::operator << (i)
и для педантов:
( ( (std::basic_ostream<char,std::char_traits<char> >::operator<< (i) )::operator << (i++) )::operator << (i).
В функциональном виде код аналогичен func ( func ( func (0, i), i++ ), i). В котором тоже будет наблюдатся такое же неопределенное поведение.
Точка следования в обоих вариантах одна. Все пераметры operator << и func вычисляются до вызова самих функций. Т.е. сначала посчитали i, i++, i, а потом уже вызвали функции. Порядок вычисления i, i++, i внутри одной точки следования не определен. Что такое точка следования -- читайте в книжках по C++.
> сколько там странц стандарт занимает
~700. Но это смотря каким шрифтом ;)
zic
> с каких это пор реализации языков от MS соответсвуют
> каким то стандартам ?
С 2003 года, с VC 7.1.
Казалось бы, причем тут MS? ;)
Это стандартный undefined behaviour описанный в стандарте.
|