LINUX.ORG.RU

Хозяйке на заметку: кибибайты в плюсах ми-ми-ми

 ,


1

2

Пишем так:

constexpr std::size_t operator""_KiB(unsigned long long int x) {return 1024ULL * x;}

А потом можем писать так:

size = 42_KiB

От нижнего подчёркивания избавиться, кажется, не получится. Ми-ми-ми? Да прямо-таки ололо!

Всем пони по морковке!


это возможность C++11. Код компилируется gcc 4.7.1 https://godbolt.org/z/Wod959qz9

Ахаха, хозяйке на заметку, ахаха. Учебник по языку хозяйке будет гораздо полезнее.

все суффиксы без подчёркивания зарезервированы для использования стандартной библиотекой, так что да, лучше использовать подчёркивание для своих суффиксов, но это просто предупреждение.

https://godbolt.org/z/a4GYoc965

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

Вот забрать бы у тебя сигареты да запереть на неделю в камеру с типографом. Нету у него. Ты даже не представляешь какую клоаку Пандоры ты сейчас затронул.

Usruser
() автор топика

Оверинжиниринг какой то. Написать явно 1024*42 или 1000*42 ну или макрос KiB(42). Всё будет ясно и понятно, а также оптимизация на этапе компиляции в виде итоговой константы. А то станет популярным такое и начнут клепать на каждый чих постфикс. Ну ладно может кому будет удобно, а я бубню, но оно потом константой станет или будет при выполнении вычислять?

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Это не оверинжиниринг, это будущее, да. Нормальные константы, которые вписывается в семантику языка вместо убогого препроцессора из 80х.

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

Это не оверинжиниринг, это будущее

Ну, фанфарам тут не место, как и заявлениям о будущем технически ничего особенного хоть и наверное удобно. При любой полезности технологии/подхода надо смотреть на наихудший результат особенно в перспективе. Вспомним десятки методов/подходов/инструментов разработки про которые в начале пути все били в барабаны и пели реферансы, а теперь разгребаем. Скажу так со соей любительской колакольни, это удобно и полезно в определённых случаях, но не более того. Ни хорошо ни плохо, создано нечто под требования текущие (или кого-то конкретно)

вместо убогого препроцессора из 80х.

Без препроцессинга язык про который мы говорим в реальности не работает. Так что не надо пилить ножку табуретки на которой сидишь =) Их и так уже три :D Вся проблема препроцессинга это его черезмерное использование порой вот и всё. Если то что ты назвал будущим тоже будет соваться везде и вся то всплывут те же проблемы когда без «посмотреть кишки что там на самом деле» мало что понятно.

Близко к сердцу не принимай просто мнение любителя быдлокодера =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Близко к сердцу не принимай просто мнение любителя быдлокодера =)

О, ты абсолютно прав, я тебе как профессиональный смотрящий за быдлокодерами говорю. Обезьяны не только запутаются в обозначениях (кб, киб) и их значениях, но и переругаются на этой почве. Всегда найдётся ретроград, у которого маркетолухи 24 байта отняли. А ещё будет тип, который смирился с кб=1000 на жестких дисках, но в ОЗУ у него кб=1024 по-прежнему. И сиди наслаждайся контекстно-зависимым суффиксом.

В общем, не отменяя полезности суффиксов в отдельных случаях, конкретно тут лучше не выебываться, а явно умножать на тыщу.

filosofia
()

Практика показывает, что эти визуальные и выразительные излишества нужны только для вау-эффект туториалов

В реальном производстве значения что констант (о ужас), что переменных берутся извне и все эти пре- & пост-фиксы как собаке пятая нога.

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

Вот забрать бы у тебя сигареты

Я не курю. И вам не советую.

запереть на неделю в камеру с типографом. Нету у него.

Приставка «под-» значит «снизу». Поэтому в случае «нижнего подчёркивания» имеем случай так называемого это плеоназма. Также как и «кивать головой» (хуже только «кивать своей головой»), «топнуть ногой», «подняться вверх», «упасть вниз» и много чего ещё.

А вообще распространённое «нижнее подчёркивание» вкупе с «эс как доллар» как бы намекает на некоторую альтернативную одарённость произносящего/пишущего.

какую клоаку Пандоры

Ничего не будет.

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

‾ <- U+203E

«Сам-» значит «сами», «-гон» значит «гоним».

Простите.

«Под-» значит «снизу». «Сверху» будет «над-». Поэтому U+203E называется «надчёркивание».

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

можно в отрыве от симводов его использовать, как выше показано. Ну и _ исторически пришел с печатных машинок где его использовали для подчеркивания текста.

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

распространённое … намекает на … альтернативную одарённость

Ох-х-х.

Usruser
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Написать явно 1024*42 или 1000*42 ну или макрос KiB(42).

Или operator""K

firkax ★★★★★
()

От нижнего подчёркивания избавиться, кажется, не получится

Подержи моё пиво:

#define KiB * 1024ull
uint64_t size = 54 KiB;
PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Подержи моё пиво

Есть столько способов вот конкретно это сломать, что даже не смешно. Сейчас заклюют.

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

С «ull» господин конечно погорячился (оно там нафиг не нужно) - но дело глубже. В такой форме на любом мало-мальски сложном выражении оно тупо рассыплется как карточный домик.

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

Сложности там не нужно, достаточно просто -1 KiB. Речь о том, что даже если применять с учетом всех особенностей, оно все равно некорректно и посыплется.

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

оно все равно некорректно и посыплется.

Мне кажется если «ull» убрать и правильно скобочки расставить - будет работать, не?

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

правильно скобочки расставить

Беру обратно - там негде «правильно скобочки расставлять».

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

И создаст проблему с значениями больше <ll>::max(), но меньше <ull>::max(). В чем проблема просто сделать корректно?

Почему нужно создавать какие-то компромиссы, так и провоцирующие на выстрел в ногу, и все ради того, чтобы не использовать нормальные средства программирования, созданные с учетом недостатков прошлых?

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

или макрос

Чур меня!

оптимизация на этапе компиляции в виде итоговой константы

Здесь тоже будет. В режиме без оптимизации есть варианты:

auto const v1 = 31337_KiB; // [1]
auto       v2 = 31338_KiB; // [2]

на GCC оба значения будут вычислены на компиляции, на clang - только const.

С -O1 уже всё вычисляет на компиляции и clang.

Можно поиграться на годболте: https://gcc.godbolt.org/z/r84zEMYse

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

Необязательно. Если сможет, то посчитает, если нет - то в рантайме. Поэтому ввели и consteval - если не сможет, то ошибка компиляции.

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

Это GCC. Шланг… какой-то более непредсказуемый. Посмотри мою ссылку выше, увидишь.

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

Изыди!

К слову, были времена, когда MS VS очень лояльно относилась к уникодным символам. По сути, код можно было писать и на русском (другом национальном языке). По крайней мере препроцессор: была задачка, типа русский текст, нужно было его «скомпилировать» обычным компилятором. Решалось подключением заголовка через механизм подобный -include ... у GCC, но срабатывало только на MS VS, как раз из-за национальных символов в макросах.

hatred ★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Без препроцессинга язык про который мы говорим в реальности не работает.

К слову, последний раз, когда обжёгся на препроцессоре, это было даже не с C/C++, а с компиляцией DeviceTree на PetaLinux (прошивку для Xilinx Zynq UltraScale+ делали). У компилятора dtc есть встроенные механизмы для включения файлов: /include/ ..., но гарные хлопцы решили обойти какие-то ограничения и засунули туда ещё и #include ... и стали препроцессировать в промежуточный результат, который потом компилировать в DTB. Я уже точно не вспомню, что конкретно было: или валилась сборка DTB или какое-то поле не получалось переопределить, но потратил день, пока разобрался, что семантика #include ... и /include/ ... очень сильно отличается :)

С макросами тоже приколы были. Особенно со скобочками.

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