Есть простая функция которая возводит число в куб.
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
.
double refcube(double &x)
{
x *= x * x;
return x;
}
Измените на:
double refcube(double x)
{
x *= x * x;
return x;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как сделать графический секудомер и добавить его в оконное приложение?
Есть метод, который получает данные из json и создает Observable<>, из него мне нужно получить данные и сохранить в List<>:
Хотел написать свой простенький редактор кода на java, типа консоли, но с подсказками, который подсказывает ошибки и тд