В C и C++ есть особенности, о которых вас вряд ли спросят на собеседовании (вернее, не спросили бы до этого момента). Почему не спросят? Потому что такие аспекты имеют мало практического значения в повседневной работе или попросту малоизвестны.
Рубрика «C++14»
Малоизвестные и интересные особенности C и C++
2024-01-12 в 16:40, admin, рубрики: C, C and C++, c++, c++11, C++14, c++17, exceptions, partial template specialization, templates, Virtual InheritanceПродление жизни временных значений в С++: рецепты и подводные камни
2022-06-04 в 12:20, admin, рубрики: auto, c++, c++11, C++14, decltype, l-value reference, nrvo, rvalue reference, temporary object, xvalue, Программирование, с++17Прочитав эту статью вы узнаете:
-
Способы, которыми можно продлить время жизни временного объекта в С++.
-
Рекомендации и подводные камни этого механизма, с которыми может столкнуться С++ программист, и с которыми сталкивался на работе я.
Информация из статьи может быть полезна как новичкам, так и профессионалам.
Если заинтересовало, то самое время налить чая, и погнали разбираться где тут референсы повисли.
Оглавление
Гетерогенный поиск в ассоциативных контейнерах на C++
2020-10-15 в 21:15, admin, рубрики: c++, C++14, c++17, C++20Ассоциативные контейнеры в C++ работают с конкретным типом ключа. Для поиска в них по ключу подобного типа (std::string, std::string_view, const char*) мы можем нести существенные потери в производительности. В этой статье я расскажу как этого избежать с помощью относительно недавно добавленной возможности гетерогенного поиска.
Под капотом сортировок в STL
2020-10-08 в 13:23, admin, рубрики: algorithms, c++, c++11, C++14, c++17, sorting, Алгоритмы, Блог компании Mail.Ru Group, Программирование
Стандарт С++ почти никогда не указывает, как именно должен быть реализован тот или иной std алгоритм. Дается только описание того, что на входе, что на выходе и асимптотические ограничения по времени работы и памяти. В статье я постарался прикинуть, какие математические алгоритмы и структуры данных имели ввиду авторы стандарта, указывая ограничения для той или иной сортировки и для некоторых других алгоритмов. А так же как эти алгоритмы реализованы на практике.
При написании статьи я использовал стандарт C++17. В качестве реализаций рассматривал GCC 10.1.0 (май 2020) и LLVM/Clang 10.0.0 (март 2020). В каждой и них есть своя реализация STL, а значит и std алгоритмов.
Jinja2 в мире C++, часть третья. «Теперь ты в конане»
2020-03-06 в 17:36, admin, рубрики: c++, c++ библиотеки, C++14, c++17, conan, conan.io, open source, пакетный менеджерС момента публикации предыдущей части прошло больше полутора лет, была реализована большая куча фичей, сделано несколько релизов, но не об этом пойдёт речь. Пару дней назад в жизни библиотеки произошло важное событие: она была добавлена в основной репозиторий conan'а (conan-center-index). Об том, как это случилось, что для этого пришлось сделать и что вообще нужно делать, чтобы добавить туда свою библиотеку, и пойдёт речь под катом.
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби» — разбор полётов
2020-01-18 в 8:09, admin, рубрики: c++, c++11, C++14, c++17, shared_from_this, smart pointers, std::enable_shared_from_this, std::shared_ptr, weak_from_this, умные указателиВ настоящей статье приводится разбор вариантов устранения антипаттерна «Зомби», описанного в первой части: Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби».
Читать полностью »
Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби»
2019-11-09 в 17:53, admin, рубрики: c++, c++11, C++14, c++17, shared_from_this, smart pointers, std::enable_shared_from_this, std::shared_ptr, weak_from_this, умные указателиВ статье приводится опасный антипаттерн «Зомби», в некоторых ситуациях естественным образом возникающий при использовании std::enable_shared_from_this. Материал — где-то на стыке техники современного C++ и архитектуры.
Читать полностью »
RESTinio — это асинхронный HTTP-сервер. Простой пример из практики: отдача большого объема данных в ответ
2019-08-03 в 8:27, admin, рубрики: c++, c++ библиотеки, C++14, open source, restinio, Программирование
Недавно мне довелось поработать над приложением, которое должно было контролировать скорость своих исходящих подключений. Например, подключаясь к одному URL приложение должно было ограничить себя, скажем, 200KiB/sec. А подключаясь к другому URL — всего 30KiB/sec.
Самым интересным моментом здесь оказалось тестирование этих самых ограничений. Мне потребовался HTTP-сервер, который бы отдавал трафик с какой-то заданной скоростью, например, 512KiB/sec. Тогда бы я мог видеть, действительно ли приложение выдерживает скорость 200KiB/sec или же оно срывается на более высокие скорости.
Но где взять такой HTTP-сервер?
Поскольку я имею некоторое отношение к встраиваемому в С++ приложения HTTP-серверу RESTinio, то не придумал ничего лучше, чем быстренько набросать на коленке простой тестовый HTTP-сервер, который способен отдавать клиенту длинный поток исходящих данных.
О том, насколько это было просто и хотелось бы рассказать в статье. Заодно узнать в комментариях, действительно ли это просто или же я сам себя обманываю. В принципе, данную статью можно рассматривать как продолжение предыдущей статьи про RESTinio под названием "RESTinio — это асинхронный HTTP-сервер. Асинхронный". Посему, если кому-то интересно прочитать о реальном, пусть и не очень серьезном применении RESTinio, то милости прошу под кат.
Достраиваем в RESTinio четвертый этаж из C++ных шаблонов. Зачем и как?
2019-06-19 в 8:16, admin, рубрики: c++, c++ библиотеки, C++14, open source, RESTful, RESTful HTTP, restinio, ПрограммированиеRESTinio — это относительно небольшой проект, представляющий из себя встраиваемый в C++приложения асинхронный HTTP-сервер. Его характерной особенностью является широкое, можно сказать, повсеместное применение C++ных шаблонов. Как в реализации, так и в публичном API.
C++ные шаблоны в RESTinio используются настолько активно, что первая статья, которая рассказывала о RESTinio на Хабре, называлась "Трехэтажные C++ные шаблоны в реализации встраиваемого асинхронного HTTP-сервера с человеческим лицом".
Трехэтажные шаблоны. И это, в общем-то, была не фигура речи.
А недавно мы в очередной раз обновили RESTinio и для добавления новой функциональности в версию 0.5.1 пришлось сделать "этажность" шаблонов еще выше. Так что местами C++ные шаблоны в RESTinio уже четырехэтажные.
И если кому-то интересно зачем нам такое потребовалось и как мы шаблоны использовали, то оставайтесь с нами, под катом будет немного подробностей. Матерые C++ гуру вряд ли найдут для себя что-нибудь новое, а вот менее продвинутые C++ники смогут посмотреть на то, как шаблоны применяются для вставки/изъятия кусков функциональности. Почти что в "дикой природе".