«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `size_t` без знака в C/C++: историческая необходимость или современный магнит для ошибок?

Почему `size_t` без знака в C/C++: историческая необходимость или современный магнит для ошибок?

Опубликовано 16 ноября 2024 г.
Просматривать:586

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

Почему size_t без знака?

Наблюдение Бьярна Страуструпа о том, что «использование unsigned вместо int для получения еще одного бита для представления положительных целых чисел почти никогда не является хорошей идеей» вызвало обеспокоенность по поводу решения сделать size_t беззнаковым.

Историческое происхождение

Первоначально size_t был сделан беззнаковым, чтобы приспособиться к архитектурам с 16-битными указателями, таким как системы DOS. Чтобы предотвратить ограничения размера строки, стандарт C требует, чтобы ptrdiff_t, знаковый аналог size_t, был фактически 17-битным.

Текущая актуальность

Хотя эти исторические причины все еще могут быть применимы во встроенных системах, они менее важны для современного 32-битного и 64-битного программирования. В этих средах использование беззнаковых типов для чисел не имеет практических преимуществ, и их использование может привести к потенциальным ошибкам из-за правил неявного преобразования C/C (например, где string("Hi").length()

Заключение

Решение сделать size_t беззнаковым не было ошибкой, а скорее практическим выбором для ограниченных систем того времени. Однако в современной практике программирования обычно рекомендуется свести к минимуму использование целых чисел без знака в интерфейсах и для чисел, за исключением особых обстоятельств, когда самоописательный характер typedef int MyType полезен.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3