В чем разница? Я думал, что эти 2 версии должны быть равными, но, видимо, это не так. Не могли бы вы объяснить, как работает первый? Почему он печатает 222 вместо 122?Как работает cout? (C++)
#include <iostream>
using namespace std;
int main() {
int a = 1;
/* #1: prints 222
cout << a << (a = 2) << a << endl;
*/
/* #2: prints 122
cout << a;
cout << (a = 2);
cout << a << endl;
*/
return 0;
}
Читайте о точках последовательности. –
Вы назначаете 'a' to 2, который изменяет значение. Ostream оценивает значения до их вывода. – Poriferous
@ Покровный правый. Позвольте мне объяснить немного больше. Компилятор прочитает каждую строку и изменит значение, после чего он будет работать с результатом. В вашей строке кода компилятора кода << << (a = 2) << a; здесь строка чтения компилятора и вы меняете значение a = 2, тогда ничего не меняется в полной строке. и после этого компилятор напечатает результат. Итак, a был изменен до 2? то результат будет 222. – UnKnown