Бить надо за использование таких типов где попало! Как увижу внутри структур «int», «long» и т.п., аж материться хочется!!! Ну придумали же int32_t, uint64_t и так далее. Зачем пользоваться типами, у которых длина от архитектуры зависит?
Зачем? То что есть и так норм. А если пришло время переопределять по вообще пофиг ибо тупедефается вообще всё под проект.
Надоедает
Ну можешь чисто для себя сделать один awesome.h где описать все удобные тебе тупедефы макросы и прочее и включат его везде где надо. Я одно время так и делал. Но потом забил. Есть uintXXX_t intXXX_t для всего чего надо =)
Не используй unsigned типы нигде кроме разбора бинарных данных. Я зуб даю, тебе один бит погоды не сделает. В бинарных данных желательно явно указывать размер типа.
Об этом уже много споров спорено, в итоге решили, что НЕ НАДО (и не надо БЫЛО, что ещё важнее). С типизацией в С/С++ unsigned типы несут больше вреда, чем пользы. size_t туда же.
8 букв вместо 4-х, к тому же с цифрами и подчёркиваниями - проще unsigned написать
Тебе шашечки, или ехать? Цифры это отличная вещь, поскольку явно виден размер типа, который на некоторых платформах может быть отличным от широко используемого, типа int == 16.
Сделай себе typedef uint32_t uint32 и пользуйся на здоровье.
Там, где мне лучше иметь явную ошибку, чем незаметную, я буду пользовать unsigned.
Проблема в том, что, если ты сделал тип unsigned, то это НИКАК не убережет тебя от залезания в оридцательную область. В смысле что не будет никакого исключения, никакой ошибки, ничего.
unsigned хорош только для повышения читабельности кода, ну и если тебе и правда так нужен лишний бит (что случается достаточно редко).
НИКАК не убережет тебя от залезания в оридцательную область
Ещё как убережёт. При int ты небольшое отрицательное число наверняка не заметишь, а при unsigned ты получишь нечто запредельное, что точно не смогёшь пропустить мимо.
Зачем пользоваться типами, у которых длина от архитектуры зависит?
Что бы хранить длину аллоцированой памяти, максимальный объем которой зависит от архитектуры, а использование переменных вмещающих больший объем на таких платформах затратнее на пару инструкций
Но вот со словом «убережёт» я всё еще не согласен.
В комментах наоборот говорится, что переполнение unsigned пройдет совсем втихую, а при переполнении signed - UB, но есть шанс, пусть и небольшой, что умный компилятор это заметит.
Но я всё равно ратую за явное указание знаковости, но в первую очередь для целей читаемости кода.
Могу предположить, что ошибки посыпятся отовсюду, начиная с заголовков стандартной библиотеки. А какие варианты в прикладном коде останутся? Все через шаблоны строчить или постоянно кастовать вручную? Ну хз, второй вариант так себе, если честно. Первый реализуем, особенно хорошо на концептах, но опять же в нынешних реалиях это приведёт к header-only коду с бесконечным временем компиляции.
По мне, неявная типизация — вкусная особенность плюсов, особенно в до-11-ую эпоху. Но надо очень аккуратно, конечно.
А какие варианты в прикладном коде останутся? Все через шаблоны строчить или постоянно кастовать вручную?
Как раз в прикладном коде функций, которые могу принимать на вход разные «похожие» типы, очень мало. Это в библиотеках, особенно публичных, их много.
А если нужны такие «универсальные» функции - можно и шаблоны, а можно просто объявить несколько вариантов функций, которые отличаются только типами параметров, и который будут просто кастовать тип и вызывать основную «максимально совместимую» функцию. Да, добавит пару строчек кода, на зато намного улучшит варификацию кода на этапе компиляции. Мне этого очень нехватает, особенно если создавать алиасы типам с помощью typedef.
Как приятно осознавать, что спустя 25 лет после создания первой 64-битной ОС в С++ добавили явные платформозависимые и платформонезависимые типы данных. Хотите знать, почему в этом и еще целой куче других языков создатели не могли ввести такие типы? Потому что любой уважающий себя web-level enterprise architect senior software engineer не может осилить две цифры в конце типа. Но время прошло, коньюктура подтолкнула акул бизнеса покорить новые высоты неумолимого прогресса в бурно меняющейся индустрии, которая не устает преподносить нам сюрприз за сюрпризом, где каждый новый день не похож на другой, и лишь способность понимать нужды завтрашнего дня уже сегодня позволяет прозорливым и опытным первопроходцам начать таки писать размер целочисленного типа в имени этого типа. Я кончил.