В C и C++ есть особенности, о которых вас вряд ли спросят на собеседовании (вернее, не спросили бы до этого момента). Почему не спросят? Потому что такие аспекты имеют мало практического значения в повседневной работе или попросту малоизвестны.
Рубрика «c++11»
Малоизвестные и интересные особенности 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Прочитав эту статью вы узнаете:
-
Способы, которыми можно продлить время жизни временного объекта в С++.
-
Рекомендации и подводные камни этого механизма, с которыми может столкнуться С++ программист, и с которыми сталкивался на работе я.
Информация из статьи может быть полезна как новичкам, так и профессионалам.
Если заинтересовало, то самое время налить чая, и погнали разбираться где тут референсы повисли.
Оглавление
ARM и программирование без блокировок
2021-01-22 в 7:05, admin, рубрики: c++, c++11, lock-free, Блог компании Яндекс, Программирование, Процессоры
Выпуск ARM-процессора Apple M1 вдохновил меня на то, чтобы написать в Твиттер про опасности программирования без блокировок (lock-free). Этот твит вызвал бурную дискуссию. Обсуждение прошло довольно неплохо, учитывая то, что попытки втиснуть в рамки Твиттера обсуждениие такой сложной темы, как модели памяти центрального процессора, — в принципе бессмысленны. Но у меня осталось желание немного раскрыть тему.
Этот пост задуман не только как обычная вводная статья про опасности программирования без блокировок (о которых я в последний раз писал около 15 лет назад), но и как объяснение, почему слабая модель памяти ARM ломает некоторый код, и почему этот код, вероятно, не работал изначально. Я также хочу объяснить, почему стандарт C++11 значительно улучшил ситуацию в программировании без блокировок (несмотря на возражения против противоположной точки зрения).
Читать полностью »
Под капотом сортировок в 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 алгоритмов.
Сказ об опасном 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++ и архитектуры.
Читать полностью »
Техника избежания неопределённого поведения при обращении к синглтону
2019-06-16 в 12:41, admin, рубрики: c++, c++11, C++14, c++17, singleton, smart pointers, std::shared_ptr, std::weak_ptr, синглтон, умные указателиВ статье рассмотрены причины возникновения и способы избежания неопределённого поведения при обращении к синглтону в современном c++. Приведены примеры однопоточного кода. Ничего compiler-specific, всё в соответствии со стандартом.
Читать полностью »
Лямбды: от C++11 до C++20. Часть 2
2019-06-13 в 11:39, admin, рубрики: c++, c++11, C++14, C++20, lambdas, Блог компании OTUS. Онлайн-образование, Программирование, С++Привет. В связи со стартом набора в новую группу по курсу «Разработчик C++», делимся с вами переводом второй части статьи «Лямбды: от C++11 до C++20». Первую часть можно прочитать тут.
В первой части серии мы рассмотрели лямбды с точки зрения C++03, C++11 и C++14. В этой статье я описал побуждения, стоящие за этой мощной фичей C++, базовое использование, синтаксис и улучшения в каждом из языковых стандартов. Я также упомянул несколько пограничных случаев.
Теперь пришло время перейти к C++17 и немного заглянуть в будущее (очень близкое!): C++20.Читать полностью »
Вред макросов для C++ кода
2019-03-20 в 19:17, admin, рубрики: C, c++, c++11, Блог компании PVS-Studio, качество кода, макросы, ошибки в коде, Программирование, Си, Совершенный кодЯзык C++ открывает обширные возможности для того, чтобы обходиться без макросов. Так давайте попробуем использовать макросы как можно реже!
Сразу оговорюсь, что я не являюсь фанатиком и не призываю отказываться от макросов из идеалистических соображений. Например, когда речь заходит о ручной генерации однотипного кода, я могу признать пользу от макросов и смириться с ними. Например, я спокойно отношусь к макросам в старых программах, написанных с использованием MFC. Нет смысла воевать с чем-то вроде этого:
BEGIN_MESSAGE_MAP(efcDialog, EFCDIALOG_PARENT )
//{{AFX_MSG_MAP(efcDialog)
ON_WM_CREATE()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
Существуют такие макросы, да и ладно. Они действительно были созданы для упрощения программирования.
Я говорю о других макросах, с помощью которых пытаются избежать реализации полноценной функции или стараются сократить размер функции. Рассмотрим несколько мотивов избегать таких макросов.
Читать полностью »
Лямбды: от C++11 до C++20. Часть 1
2019-03-20 в 10:26, admin, рубрики: c++, c++11, C++14, Блог компании OTUS. Онлайн-образование, Программирование, С++Добрый день, друзья. Сегодня мы подготовили для вас перевод первой части статьи «Лямбды: от C++11 до C++20». Публикация данного материала приурочена к запуску курса «Разработчик C++», который стартует уже завтра.
Лямбда-выражения являются одним из наиболее мощных дополнений в C++11 и продолжают развиваться с каждым новым стандартом языка. В этой статье мы пройдемся по их истории и посмотрим на эволюцию этой важной части современного C++.
Вторая часть доступна по ссылке:
Lambdas: From C++11 to C++20, Part 2
Читать полностью »