Cout вычесть вывод в простой печати - PullRequest
0 голосов
/ 21 февраля 2019

Когда я использую cout для вывода значения моей переменной, я не получаю одинаковый ответ, если я использую два оператора в одной или двух строках.Вы можете мне помочь?

int a= 5;
cout << a << endl;
cout << a-- << endl;

cout << a << a-- << endl; 
// it gives me different answer, why?
//they are basically same thing 

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Нет гарантий порядка оценки до C ++ 17 с operator <<, но с "C ++ 17, порядок слева направо является гарантией для operator <<.

См. eval_order для более подробной информации.

0 голосов
/ 21 февраля 2019
cout << a << a-- << endl; 

переводится как:

cout.operator<<(a).operator<<(a--).operator<<(endl);

В таком случае язык не гарантирует, какой из аргументов будет оценен первым.Компилятор может свободно выбирать порядок оценки, который им подходит.Обратите внимание, что порядок вызова функции гарантирован, но не порядок вычисления аргументов функции.

Если вы можете использовать , стандарт изменился для << оператор.Это гарантирует порядок оценки, который имеет смысл, и вы получите ожидаемый результат.

...