LINUX.ORG.RU

История изменений

Исправление GPFault, (текущая версия) :

Писал на С++. Решил заменить отдельные min и max на minmax. Потом компания потратила 3 человеконедели на поиск трудновоспроизводимой ошибки, иногда дающей неверный результат вычислений на некоторых платформах.

Минимальный пример невалидного кода:

#include <iostream>
#include <algorithm>

int getx1(){return 0;}
int getx2(){return 1;}

int main()
{
    auto min_max = std::minmax(getx1(), getx2());

    auto min = std::min(getx1(), getx2());
    auto max = std::max(getx1(), getx2());
    
    std::cout << "ok:" << min << " " << max << "\n";
    std::cout << "undefined behavour:" << min_max.first << " " << min_max.second << "\n";
    return 0;
}

Почему последний вывод в cout невалидный - остаётся заданием для лоровцев.

Исходная версия GPFault, :

Писал на С++. Решил заменить отдельные min и max на minmax. Потом компания потратила 3 человеконедели на поиск трудновоспроизводимой ошибки, иногда дающую неверный результат вычислений на некоторых платформах.

Минимальный пример невалидного кода:

#include <iostream>
#include <algorithm>

int getx1(){return 0;}
int getx2(){return 1;}

int main()
{
    auto min_max = std::minmax(getx1(), getx2());

    auto min = std::min(getx1(), getx2());
    auto max = std::max(getx1(), getx2());
    
    std::cout << "ok:" << min << " " << max << "\n";
    std::cout << "undefined behavour:" << min_max.first << " " << min_max.second << "\n";
    return 0;
}

Почему последний вывод в cout невалидный - остаётся заданием для лоровцев.