c++11

  • ХабрахабрФото Металингвистический совратитель Си. Опус I: Предварительные ласки

    Металингвистический совратитель Си. Опус I: Предварительные ласки

    >> Осторожно, модерн! 2 — 0. 1. Спор на баксы и девчонок Система макросов добавлена в язык программирования Си с целью абстрагирования часто повторяющихся синтаксических конструкций, и как следствие — снижения ментальной нагрузки при чтении и написании исходного кода. Но не всё так радужно… после моих экспериментов в написании нетривиальных метапрограмм на связке Boost/Preprocessor + Boost/VMD я осознал, что с…

    Читать далее »
  • ХабрахабрФото Под капотом сортировок в STL

    Под капотом сортировок в STL

    Стандарт С++ почти никогда не указывает, как именно должен быть реализован тот или иной std алгоритм. Дается только описание того, что на входе, что на выходе и асимптотические ограничения по времени работы и памяти. В статье я постарался прикинуть, какие математические алгоритмы и структуры данных имели ввиду авторы стандарта, указывая ограничения для той или иной сортировки и для некоторых других…

    Читать далее »
  • ХабрахабрФото Ох уж этот std::make_shared…

    Ох уж этот std::make_shared…

    C++ Core Guidelines содержат правило R22, предписывающее использовать std::make_shared вместо вызова конструктора std::shared_ptr. В Core Guidelines приводится всего лишь один аргумент за такое решение — экономия на аллокации (и деаллокации). А если копнуть чуть глубже? std::make_shared полезный Почему вообще в STL появился std::make_shared? Есть канонический пример, в котором конструирование std::shared_ptr из свежесозданного сырого указателя может приводить к утечке памяти: process(std::shared_ptr<Bar>(new…

    Читать далее »
  • ХабрахабрФото Альтернативное понимание контекста с помощью статистической языковой модели

    Альтернативное понимание контекста с помощью статистической языковой модели

    В интернете полно статей на тему основанных на N-граммах языковых моделей. При этом, готовых для работы библиотек довольно мало. Есть KenLM, SriLM и IRSTLM. Они популярны и используются во многих крупных проектах. Но есть проблемы: Библиотеки старые, не развиваются. Плохо поддерживают русский язык. Работают только с чистым, специально подготовленным, текстом Плохо поддерживают UTF-8. Например, SriLM с флагом tolower ломает кодировку.…

    Читать далее »
  • ХабрахабрФото Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби» — разбор полётов

    Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби» — разбор полётов

    В настоящей статье приводится разбор вариантов устранения антипаттерна «Зомби», описанного в первой части: Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби». Введение Весь код, приведённый в статье, опубликован на гитхабе в ветках. В коде использованы несколько новшеств C++17 — weak_from_this(), if statement with init-statement, может что-то ещё по мелочи. Уничтожение вышестоящей бизнес-логикой всех сильных ссылок на экземпляр класса не приводит к…

    Читать далее »
  • ХабрахабрФото Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби»

    Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби»

    В статье приводится опасный антипаттерн «Зомби», в некоторых ситуациях естественным образом возникающий при использовании std::enable_shared_from_this. Материал — где-то на стыке техники современного C++ и архитектуры. Введение C++11 предоставил разработчику замечательные инструменты для работы с памятью — умные указатели std::unique_ptr и связку std::shared_ptr + std::weak_ptr. Использование умных указателей по удобству и безопасности существенно перевешивает использование сырых указателей. Умные указатели широко применяются…

    Читать далее »
  • ХабрахабрФото Неопределённое поведение с устаревшими объявлениями функций в ANSI C

    Неопределённое поведение с устаревшими объявлениями функций в ANSI C

    Прототипы были введены с целью устранить недостатки, которыми обладают обычные объявления функций. Стандарт ANSI C определяет понятие прототипа функции, представляющее собой подмножество объявления функции, которое указывает типы входных параметров. Таким образом, указание списка типов параметров в круглых скобках прототипа функции обязательно, иначе такое выражение будет признаваться компилятором как устаревшее объявление функции, что может привести к неоднозначным ситуациям, описанным в данной…

    Читать далее »
  • ХабрахабрФото Техника избежания неопределённого поведения при обращении к синглтону

    Техника избежания неопределённого поведения при обращении к синглтону

    В статье рассмотрены причины возникновения и способы избежания неопределённого поведения при обращении к синглтону в современном c++. Приведены примеры однопоточного кода. Ничего compiler-specific, всё в соответствии со стандартом. Введение Для начала рекомендую ознакомиться с другими статьями о синглтонах на Хабре:Три возраста паттерна SingletonСинглтоны и общие экземпляры3 cпособа нарушить Single Responsibility PrincipleSingleton — паттерн или антипаттерн?Использование паттерна синглтон… и наконец статья,…

    Читать далее »
  • ХабрахабрФото [Перевод] Лямбды: от C++11 до C++20. Часть 2

    [Перевод] Лямбды: от C++11 до C++20. Часть 2

    Привет, хабровчане. В связи со стартом набора в новую группу по курсу «Разработчик C++», делимся с вами переводом второй части статьи «Лямбды: от C++11 до C++20». Первую часть можно прочитать тут. В этой статье я описал побуждения, стоящие за этой мощной фичей C++, базовое использование, синтаксис и улучшения в каждом из языковых стандартов. В первой части серии мы рассмотрели лямбды…

    Читать далее »
  • ХабрахабрФото [Перевод] Лямбды: от C++11 до C++20. Часть 1

    [Перевод] Лямбды: от C++11 до C++20. Часть 1

    Добрый день, друзья. Сегодня мы подготовили для вас перевод первой части статьи «Лямбды: от C++11 до C++20». Публикация данного материала приурочена к запуску курса «Разработчик C++», который стартует уже завтра. В этой статье мы пройдемся по их истории и посмотрим на эволюцию этой важной части современного C++. Лямбда-выражения являются одним из наиболее мощных дополнений в C++11 и продолжают развиваться с…

    Читать далее »


Кнопка «Наверх»