Есть простая функция которая возводит число в куб.
double refcube(double &x)
{
x *= x * x;
return x;
}
К примеру double x = 3.0, то на экран мне выведет 27 = 3
std::cout << refcube(x)<< " = " << x << std::endl;
Если я изменю вывод сделав его таким
std::cout << refcube(x);
std::cout << " = " << x << std::endl;
то выведет измененное значение переменной x, то есть 27 = 27
При компиляции под x64 такой проблемы нет.
С чем это может быть связано?
P.S система x64
Ответ
Это может быть связано с версией вашего компилятора и поддерживаемого им стандарта языка.
Начиная со стандарта С++17 языка С++ левая часть оператора << целиком и полностью вычисляется до правой части. Этот код
std::cout << refcube(x) << " = " << x << std::endl;
должен выводить 27 = 27
В более ранних версиях языка выводится может и 27 = 3 и 27 = 27. Поведение не специфицировано.
Как только вы разбиваете это выражение на два отдельных выражения, неоднозначность исчезает во всех версиях спецификации. Вывод должен быть 27 = 27
Комментариев нет:
Отправить комментарий