неправильно сформировано 5.19), в этом случае программа некорректна. "). То, что я сказал раньше, относится к

от вопрос уже есть ответ здесь:

Неявные правила преобразования типов в операторах C ++ 9 ответов

Рассмотрим следующие программы:

// http://ideone.com/4I0dT
#include <limits>
#include <iostream>

int main()
{
    int max = std::numeric_limits<int>::max();
    unsigned int one = 1;
    unsigned int result = max + one;
    std::cout << result;
}

а также

// http://ideone.com/UBuFZ
#include <limits>
#include <iostream>

int main()
{
    unsigned int us = 42;
    int neg = -43;
    int result = us + neg;
    std::cout << result;
}

Как оператор + "узнает", какой тип возвращать? Общее правило состоит в том, чтобы преобразовать все аргументы в самый широкий тип, но здесь нет четкого «победителя» междуint а такжеunsigned int, В первом случаеunsigned int должен быть выбран в результатеoperator+потому что я получаю результат2147483648, Во втором случае нужно выбиратьintпотому что я получаю результат-1, Тем не менее, я не вижу в общем случае, как это разрешимо. Это неопределенное поведение, которое я вижу, или что-то еще?

Ответы на вопрос(3)

Ваш ответ на вопрос