@hirthwork

Тег c++ в блоге hirthwork

hirthwork
29 Sep 2017
hirthwork

Я решил вам признаться в чём-то крайне постыдном. Когда я был первокурсником и только начинал изучать плюсцы, то операторы присваивания у моих классов возвращали void.

hirthwork
17 Aug 2017
hirthwork

напомните, как в XXI веке моднее всего вызвать в конструкторе функцию возвращающую void, до того как проинициализируется первое поле? А то писать фейковый класс VoidFunctionCaller мне как-то лень

hirthwork
24 May 2017
hirthwork

Оказывается, при выбросе исключения деструкторы объектов будут вызваны только если эксепшен был пойман в catch. В противном случае вызов деструкторов implementation-defined. И тебе может не понравиться тот define, который выбрал твой implementation, %username%. Пруф: https://stackoverflow.com/a/39963032

hirthwork
13 Feb 2017
hirthwork

Скажите, а что это за ебанутая мода объявлять функцию auto my_func() -> my_type; вместо my_type my_func();?
От этого что, писюн длиннее становится что ли? Потому ни краткости, ни читабельности коду это точно не придаёт

hirthwork
24 Jan 2017
hirthwork

функция парсинга и валидации конфига — 66 строк
функция которая выполняет всю работу — 40 строк

hirthwork
01 Oct 2016
hirthwork

У меня вопрос к сообществу касательно strong guarantee и moveable объектов.
Допустим, у меня есть функция, которая кладёт в мапу данные ассоциированные с айдишником объекта, а затем отдаёт айдишник в какой-то коллбек, который может пофейлиться (но не кинуть эксепшен):

auto iter = map.emplace(id, std::move(data));
if (!callback(id)) {
    map.erase(iter.first);
}

Проблем в этом коде две:
1. По хорошему, данными должен владеть коллбек. Но не владеет и с этим я ничего сделать не могу
2. В данном куске кода нарушается strong guarantee — если коллбек пофейлился, то data уже мувнулся и данные потерялись. И вот с этим я что-то сделать могу.

Первая мысль, что пришла в голову — можно не мувать, а использовать shared_ptr (всё равно там уже данные лежат в unique_ptr). Но моя религия запрещать использовать атомик каунтеры, там где можно обойтись без них.
Вторая мысль была о том, чтобы перед вызовом erase возвращать данные обратно:

auto iter = map.emplace(id, std::move(data));
if (!callback(id)) {
    std::swap(data, iter.first->second);
    map.erase(iter.first);
}

Скажите, насколько такой подход корректен?

З.Ы. Рассуждения ведутся в контексте:
https://github.com/hirthwor.../src/fs.hpp#L97-L105
https://github.com/hirthwor...s/lookup.cpp#L59-L70

hirthwork
25 Sep 2016
hirthwork

у гоцацэ какие-то ебанутые варнинги в -Wextra.
Вот так писа́ть нельзя: struct s{}; struct s2{s*s;};
А вот так можно: struct s{}; void f(s*s){(void)s;}

hirthwork
13 Sep 2016
hirthwork

Мне так понравились поначалу свежие плюсцы, что я прям не знал как же так, неужели никакого говна в новых плюсах нет? Нашёл! В этом говноязыке нету std::make_unique_lock и std::make_shared_lock! Говно, а не язык. Можно обмазываться.

hirthwork
13 Sep 2016
hirthwork

ISO/IEC 14882 Draft №4606 §23.2.4 Associative containers

9 The insert and emplace members shall not affect the validity of iterators and references to the container, and the erase members shall invalidate only iterators and references to the erased elements.

hirthwork
05 Sep 2016
hirthwork

Кстати, после вчерашнего опыта со свежими плюсами я осознал насколько расточительно расходуется память при работе с C++03: на каждый чих по аллокации. Хочешь добавить элемент в std::vectory<std::string>? Получай лишнюю аллокацию! Добавление вывело size за capacity? АХАХАХА! ТЫСЯЧИ АЛЛОКАЦИЙ!
В общем, это, C++14 — нормик. Стандартная библиотека пока ещё отсасывает в плане доступа к элементам ОС, но в целом это оказался очень большой шаг вперёд.

hirthwork
10 Jun 2016
hirthwork

хотел было написать, что мне не хватает в джаве private наследования, а потом понял, что в плюсах просто не сделаешь таких красивых вещей ради которых мне не хватает в джаве private наследования

hirthwork
04 Dec 2015
hirthwork

#iarcv/11 мне напомнил случай года четыре назад, когда я ещё был плюсоблядью в яндексе
нужен мне был какой-то паттерн синхронизации, в дебрях кода нашёл я уже готовую реализацию. посмотрел — а там на каждый чих мьютекс используется.
я был ещё зелен и, кажется, двадцатипятилетний. решил выебнуться сделать паттерн шаблонным и запихнуть туда спинлок
сделал, довольный собой послал на ревью. ревьювер спросил: «А ты сравнил производительность?»
в общем, оказалось, что реализация на спинлоках вышла на порядок медленнее. с тех пор я стал куда меньше выёбываться своими «знаниями примитивов синхронизации»

hirthwork
26 Oct 2015
hirthwork

Выбери компилятор. Выбери libc. Выбери версию стандарта. Выбери реализацию STL. Выбери систему сборки. Выбери правила именования. Выбери правила расстановки скобок. Выбери набор разрешённый ворнингов при компиляции. Выбери порядок включения заголовочных файлов, рекомендации по использованию макросов, набор тайпдефов, которые все обязаны использовать. Выбери себе UB, чтобы было с чем поебаться в ночь с субботы на воскресенье. Выбери метапрограммирование. Выбери слой абстракции над ОС. Выбери обёртку над gdb. Выбери будущее. Выбери C++… Но зачем мне всё это? Я не стал выбирать C++… Я выбрал кое-что другое… Причины? Какие могут быть причины, когда есть Java?

hirthwork
26 Oct 2015
hirthwork

Я не должен C++.
C++ убивает разум.
C++ есть задротство, влекущее за собой окончательное унижение.
Но я встречу C++ и приму его.
Я позволю ему пройти надо мной и сквозь меня.
А когда он пройдёт через меня, я обращу свой внутренний взор на его путь;
И там, где был C++, не останется ничего.
Останусь лишь я сам.

hirthwork
03 Sep 2014
hirthwork

посоветуйте модный thread safe LRU cache

hirthwork
08 Aug 2014
hirthwork

а где в интернетах сводятся воедино все упущения в C++? ну типа отсутствие автоматического noexcept, который вчера обсуждали в #tboga или там требование конструирования виртуальных базовых в абстрактных классах

hirthwork
07 Aug 2014
hirthwork

achievement unlocked: скатить политосрач в плюсосрач. пруф: #tboga

hirthwork
22 Jun 2014
hirthwork

поцчему в C++11 нельзя при компиляции указать, что new должен не std::bad_alloc кидать, а делать abort()? мои программы всё равно OOM пережить не могут. а так — куча методов стали бы сразу noexcept и всё типа получше мог бы компилятор соптимизировать

hirthwork
21 Jun 2014
hirthwork

вот std::set::find сделали шаблонным, а почему std::unordered_set::find не догадались шаблонным сделать?

hirthwork
21 Jun 2014
hirthwork

почему даже в C++14 компилятор ругается на 24ю строку? http://ideone.com/ifeDVn почему нельзя мувнуть лямбду с мувабл капчурами?

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.