Задать вопрос
evgeniy8705
@evgeniy8705
Повелитель вселенной

Почему выводится другое значение вместо ожидаемого?

Подскажите почему value выводится равное 14 а не 13?

#include <iostream>

inline double square(double x) { return x * x; }

int main()
{
	double value = 13.0;

	std::cout << "value = " << value << ", squared = " << square(value++) << std::endl; // value = 14, squared = 169

	return 0;
}
  • Вопрос задан
  • 106 просмотров
Подписаться 2 Простой Комментировать
Ответ пользователя Wataru К ответам на вопрос (2)
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Очевидно, потому что оператор value++ (вместе с square) выполнился раньше оператора сдвига <<, которые используются для вывода в поток cout.

Вообще, у меня оно выводит 13.

Стандарт гарантирутет, что постинкримент сработает после того, как значение пременной возьмется для вычисления выражения, а вот когда именно во время вычисления этого выражения - это уже от компилятора зависит.

Вообще, использование переменной value в том же выражении, что и она же с постинкриментом - Undefined behavior.

Мне лень искать конкретные пункты стандарта, из которых будет следовать, что это UB, но просто запомните: нельзя использовать перменную и переменную++ в одном и том же выражении.
Ответ написан