Проблемы с вывод при компиляцией под х86

184
01 октября 2018, 12:40

Есть простая функция которая возводит число в куб.

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

Answer 1

Это может быть связано с версией вашего компилятора и поддерживаемого им стандарта языка.

Начиная со стандарта С++17 языка С++ левая часть оператора << целиком и полностью вычисляется до правой части. Этот код

std::cout << refcube(x) << " = " << x << std::endl;

должен выводить 27 = 27.

В более ранних версиях языка выводится может и 27 = 3 и 27 = 27. Поведение не специфицировано.

Как только вы разбиваете это выражение на два отдельных выражения, неоднозначность исчезает во всех версиях спецификации. Вывод должен быть 27 = 27.

Answer 2
double refcube(double &x)
{
    x *= x * x;
    return x;
}

Измените на:

double refcube(double x)
{
    x *= x * x;
    return x;
}
READ ALSO
Кнопка QPushButton

Кнопка QPushButton

Есть класс с унаследованной кнопой:

182
Помогите сделать секундомер на Java FX

Помогите сделать секундомер на Java FX

Как сделать графический секудомер и добавить его в оконное приложение?

451
Как мне из Observable&lt;io.rxjava&gt; сохранить данные в List&lt;&gt;?

Как мне из Observable<io.rxjava> сохранить данные в List<>?

Есть метод, который получает данные из json и создает Observable<>, из него мне нужно получить данные и сохранить в List<>:

178
Свой десктопный редактор кода на java

Свой десктопный редактор кода на java

Хотел написать свой простенький редактор кода на java, типа консоли, но с подсказками, который подсказывает ошибки и тд

139