Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Фнукции действительно вызываются последовательно и параметры тоже передаются в ыункции по мере их вызова. Т.е. так, как ты и ожидал. А вот в какой момент вычисляются эти передаваемые пареметры — не определено. Отсюда и неожиданные результаты. Фрагменты кода
АТ>содержат модификацию одного и того скалярного объекта 'z' несколько раз в рамках одного и того же выражения. Такой код порождает неопределенное поведение. Поэтому предсказать его результат никак нельзя.
Может это как-то коррелирует с тем, что неявно существует ЕЩЕ один параметр this, который должен быть вычислен? Т.е. если перевести С++ на С (примерно так), то будет, наверное, понятно поведение компилятора.
a.f1( ++z,1 ).а1( ++z,2 ).f1( ++z,3 );
// =>
f1C( f1C( f1C( &a, ++z,1 ), ++z,2 ), ++z,3 )