LINUX.ORG.RU

Бить надо за использование таких типов где попало! Как увижу внутри структур «int», «long» и т.п., аж материться хочется!!! Ну придумали же int32_t, uint64_t и так далее. Зачем пользоваться типами, у которых длина от архитектуры зависит?

OnlyAsk
()
Ответ на: комментарий от EXL

Да, до сих пор нет, я знаю. Таки когда?

next_time ★★★★★
() автор топика

Зачем? То что есть и так норм. А если пришло время переопределять по вообще пофиг ибо тупедефается вообще всё под проект.

Надоедает

Ну можешь чисто для себя сделать один awesome.h где описать все удобные тебе тупедефы макросы и прочее и включат его везде где надо. Я одно время так и делал. Но потом забил. Есть uintXXX_t intXXX_t для всего чего надо =)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)

то есть тебе нужно именно uint, а не uint32_t?

Тогда ты просто поехавший.

fsb4000 ★★★★★
()
Ответ на: комментарий от next_time

Не используй unsigned типы нигде кроме разбора бинарных данных. Я зуб даю, тебе один бит погоды не сделает. В бинарных данных желательно явно указывать размер типа.

filosofia
()
Ответ на: комментарий от filosofia

Не используй unsigned типы нигде

А если НАДО, чтобы переменная была >0 при любых обстоятельствах? Понятно, что есть size_t, но unsigned звучит по смыслу ближе.

anonymous
()
Ответ на: комментарий от anonymous

Об этом уже много споров спорено, в итоге решили, что НЕ НАДО (и не надо БЫЛО, что ещё важнее). С типизацией в С/С++ unsigned типы несут больше вреда, чем пользы. size_t туда же.

filosofia
()
Ответ на: комментарий от next_time

проще unsigned написать

Стоять, бояться! Вот это уже ересь. Это разные типы, не надо приравнивать их меж собой.

anonymous
()
Ответ на: комментарий от anonymous

для simd

С каких это пор SIMD в каждом процессоре? Зачем это нужно в стандарте языка?

а векторные типы для simd где?

Hint: в библиотеках интринсиков.

EXL ★★★★★
()
Ответ на: комментарий от filosofia

НЕ НАДО

Всё-равно не убедил. Там, где мне лучше иметь явную ошибку, чем незаметную, я буду пользовать unsigned.

anonymous
()
Ответ на: комментарий от next_time

8 букв вместо 4-х, к тому же с цифрами и подчёркиваниями - проще unsigned написать

Тебе шашечки, или ехать? Цифры это отличная вещь, поскольку явно виден размер типа, который на некоторых платформах может быть отличным от широко используемого, типа int == 16.

Сделай себе typedef uint32_t uint32 и пользуйся на здоровье.

EXL ★★★★★
()
Ответ на: комментарий от filosofia

Не используй unsigned типы нигде кроме разбора бинарных данных.

И битовый сдвиг влево никогда не использовать?

monk ★★★★★
()
Ответ на: комментарий от anonymous

Там, где мне лучше иметь явную ошибку, чем незаметную, я буду пользовать unsigned.

Проблема в том, что, если ты сделал тип unsigned, то это НИКАК не убережет тебя от залезания в оридцательную область. В смысле что не будет никакого исключения, никакой ошибки, ничего.

unsigned хорош только для повышения читабельности кода, ну и если тебе и правда так нужен лишний бит (что случается достаточно редко).

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

Сравнение и арифметика между знаковыми и беззнаковыми и неявное преобразование типов в целом. Или эпичный костыль std::string::npos.

filosofia
()
Последнее исправление: filosofia (всего исправлений: 1)
Ответ на: комментарий от Kroz

НИКАК не убережет тебя от залезания в оридцательную область

Ещё как убережёт. При int ты небольшое отрицательное число наверняка не заметишь, а при unsigned ты получишь нечто запредельное, что точно не смогёшь пропустить мимо.

anonymous
()
Ответ на: комментарий от filosofia

Ещё можно умножать на 2, да.

А ещё чаше делить на 2. И не надо рассказывать, что деление - это гораздо лучше сдвига вправо.

anonymous
()
Ответ на: комментарий от filosofia

неявное преобразование типов в целом

О, да. Я на многое готов чтобы выключить эту штуку. Я даже готов ставить нестандартные плагины к компилятору. Но пока решения нет :(

Kroz ★★★★★
()
Ответ на: комментарий от anonymous

При int ты небольшое отрицательное число наверняка не заметишь

Не заметишь чем? Глазом? Мне нужен автоматически контроль ошибок.

Kroz ★★★★★
()
Ответ на: комментарий от fsb4000

Конечно деление лучше

Стоп! Разговор закончен. До свидания.

anonymous
()
Ответ на: комментарий от Kroz

Мне нужен автоматически контроль ошибок.

Тебе. А мне нужно, чтобы алгоритм работал правильно, либо не работал вообще. Ошибочный результат для меня хуже, чем никакой.

anonymous
()
Ответ на: комментарий от Kroz

то это НИКАК не убережет тебя от залезания в оридцательную область.

Как минимум, убережёт при переполнении. То есть нарваться на что-то вроде https://habr.com/ru/company/pvs-studio/blog/276657/ вероятность меньше.

monk ★★★★★
()
Ответ на: комментарий от OnlyAsk

Зачем пользоваться типами, у которых длина от архитектуры зависит?

Что бы хранить длину аллоцированой памяти, максимальный объем которой зависит от архитектуры, а использование переменных вмещающих больший объем на таких платформах затратнее на пару инструкций

SR_team ★★★★★
()
Ответ на: комментарий от EXL

Поздравьте меня с разморозкой. В любом случае я рад что 8 лет назад стандартизовали эти типы, также отрадно что я наконец о них узнал.

Нужно поблагодарить ТС :)

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Kroz

+1

Было бы круто, если в современные компиляторы добавили специальный флажок, который плевался error’ами на любые неявные преобразования.

EXL ★★★★★
()
Ответ на: комментарий от EXL

+1, было бы полезно, все десять ног уже прострелил в таких местах…

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от EXL

который плевался error’ами на любые неявные преобразования.

Только плевки желательно «смачные», а не краткое «error».

anonymous
()
Ответ на: комментарий от anonymous

Тебе. А мне нужно, чтобы алгоритм работал правильно, либо не работал вообще. Ошибочный результат для меня хуже, чем никакой.

unsigned тебе в этом не поможет.

Kroz ★★★★★
()
Ответ на: комментарий от monk

Как минимум, убережёт при переполнении. То есть нарваться на что-то вроде https://habr.com/ru/company/pvs-studio/blog/276657/ вероятность меньше.

Статья полезная, спасибо.

Но вот со словом «убережёт» я всё еще не согласен.

В комментах наоборот говорится, что переполнение unsigned пройдет совсем втихую, а при переполнении signed - UB, но есть шанс, пусть и небольшой, что умный компилятор это заметит.

Но я всё равно ратую за явное указание знаковости, но в первую очередь для целей читаемости кода.

Kroz ★★★★★
()
Ответ на: комментарий от OnlyAsk

Зачем пользоваться типами, у которых длина от архитектуры зависит?

А зачем пользоваться типами с фиксированной длиной, кроме как для описания бинарных протоколов?

anonymous
()
Ответ на: комментарий от Kroz

Могу предположить, что ошибки посыпятся отовсюду, начиная с заголовков стандартной библиотеки. А какие варианты в прикладном коде останутся? Все через шаблоны строчить или постоянно кастовать вручную? Ну хз, второй вариант так себе, если честно. Первый реализуем, особенно хорошо на концептах, но опять же в нынешних реалиях это приведёт к header-only коду с бесконечным временем компиляции.

По мне, неявная типизация — вкусная особенность плюсов, особенно в до-11-ую эпоху. Но надо очень аккуратно, конечно.

filosofia
()
Ответ на: комментарий от filosofia

А какие варианты в прикладном коде останутся? Все через шаблоны строчить или постоянно кастовать вручную?

Как раз в прикладном коде функций, которые могу принимать на вход разные «похожие» типы, очень мало. Это в библиотеках, особенно публичных, их много.

А если нужны такие «универсальные» функции - можно и шаблоны, а можно просто объявить несколько вариантов функций, которые отличаются только типами параметров, и который будут просто кастовать тип и вызывать основную «максимально совместимую» функцию. Да, добавит пару строчек кода, на зато намного улучшит варификацию кода на этапе компиляции. Мне этого очень нехватает, особенно если создавать алиасы типам с помощью typedef.

Kroz ★★★★★
()

Как приятно осознавать, что спустя 25 лет после создания первой 64-битной ОС в С++ добавили явные платформозависимые и платформонезависимые типы данных. Хотите знать, почему в этом и еще целой куче других языков создатели не могли ввести такие типы? Потому что любой уважающий себя web-level enterprise architect senior software engineer не может осилить две цифры в конце типа. Но время прошло, коньюктура подтолкнула акул бизнеса покорить новые высоты неумолимого прогресса в бурно меняющейся индустрии, которая не устает преподносить нам сюрприз за сюрпризом, где каждый новый день не похож на другой, и лишь способность понимать нужды завтрашнего дня уже сегодня позволяет прозорливым и опытным первопроходцам начать таки писать размер целочисленного типа в имени этого типа. Я кончил.

byko3y ★★★★
()
Ответ на: комментарий от anonymous

А зачем пользоваться типами с фиксированной длиной, кроме как для описания бинарных протоколов?

Чтобы один и тот же кода не вызывал на какой-нибудь архитектуре переполнение.

char a[100000];
for (int i = 0; i < 100000; i++) a[i] = 0;

где-то может быть бесконечным циклом.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.