type 'std::stack<long long>::value_type' (aka 'long long') is implementation-defined
Почему конвертирование из unsigned в signed это такая большая проблема? Разве может произойти переполнение в таком случае? Я понимаю из signed в unsigned выдаёт предупреждение, возможность переполнения, но почему наоборот тоже?
Там дело не в переполнии, а в том, что у тебя первый бит воспринимается как знаковый, да и вообще хранение отрицательных чисел отличается по-моему
Диапазон одноименного unsigned чуть менее чем в 2 раза шире в положительной области
то-есть есть реализация (или потенциально может существовать), где неявное конвертирование из unsigned в signed может привести к абсолютно неправильному интерпретированию числа?
Начиная с c++20 это вроде не проблема, так как обязали использовать two’s complement представление знаковых чисел
Плюс преобразование signed -> unsigned разрешено специально для возможности применения битовой арифметики.
А стандарт насколько я понимаю не предусматривает, чтобы long и long long имели разный размер в памяти? Слышал, что где-то и long и long long имеют 64 бита для значения, а где-то иначе. Так ли это?
Не так так как стандарт не определяет конкретные размеры. Обычно более "широкий" тип должен быть не уже более узкого, и всё.
Обсуждают сегодня