Код
cout << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << endl;
не делает то же самое, что и
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " ";
cout << ((p++)->GetTires()) << " " << endl;
Вот как выглядит типичный оператор << 100 * <pre>ostream& operator<<(ostream& os, const Type& dt)
{
os << dt.value;
return os;
}
Что происходит в первой строкеэтот компилятор будет оценивать все подвыражения, которые содержат оператор приращения.Порядок оценки не определен стандартом, но может не соответствовать направлению исполнения.В результате первое подвыражение вычисляется первым, а приращение переносится в третье третье выражение и т. Д.