неправильно сформировано 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
, Тем не менее, я не вижу в общем случае, как это разрешимо. Это неопределенное поведение, которое я вижу, или что-то еще?