Термин «современный C++» часто используется как синоним выражения «код, использующий новый стандарт C++». Здесь «новый» может означать что угодно от C++11 до C++17, или даже то, что уже сейчас доступно из C++20. Я думаю, что современный C++ — это нечто большее, не ограничивающееся добавлением флага -std=c++17.
Читать полностью »
Рубрика «c++98»
Современный C++ != (Самый)Новый Стандарт
2018-11-13 в 17:45, admin, рубрики: c++, c++11, C++14, c++17, C++20, c++98, Блог компании PVS-Studio, ПрограммированиеКак я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.3
2018-07-27 в 6:07, admin, рубрики: boost, borland c++ builder, c++, c++03, c++11, c++98, gcc, loki, open source, QNX, sfinae, Visual Studio, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, Совершенный код, стандартная библиотека, шаблонное программирование
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.
Настало время type_traits и всей этой «особой шаблонной магии». В предыдущих частях данной главы мы рассмотрели мою реализацию базовых шаблонов стандартной библиотеки и в данной части речь пойдет про комбинацию техники SFINAE с шаблонами и немного о кодогенерации.
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Больше шаблонов C++ под катом.
Читать полностью »
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.2
2018-07-23 в 15:36, admin, рубрики: boost, borland c++ builder, c++, c++03, c++11, c++98, gcc, loki, QNX, sfinae, Visual Studio, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, разработка под windows, Совершенный код, стандартная библиотека, шаблонное программирование
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.
Настало время type_traits и всей этой «особой шаблонной магии». В первой части мы рассмотрели мою реализацию самых простых шаблонов стандартной библиотеки, теперь же заберемся «поглубже» в шаблоны.
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Продолжение погружения в мир «шаблонной магии» C++.
Читать полностью »
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 4.1
2018-07-18 в 15:50, admin, рубрики: boost, borland c++ builder, c++, c++03, c++11, c++98, gcc, loki, QNX, sfinae, Visual Studio, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, разработка под windows, Совершенный код, стандартная библиотека, шаблонное программирование
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Были реализованы static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. Включена своя реализация nullptr, которая подбирается на этапе компиляции.
Настало время type_traits и всей этой «особой шаблонной магии».
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Погрузимся же в мир «шаблонной магии» C++.
Читать полностью »
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 3
2018-07-16 в 10:05, admin, рубрики: boost, borland c++ builder, c++, c++03, c++11, c++98, gcc, loki, QNX, sfinae, Visual Studio, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, Совершенный код, стандартная библиотека
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Были реализованны static_assert, noexcept, countof, а так же, после рассмотрения всех нестандартных дефайнов и особенностей компиляторов, появилась информация о функциональности, которая поддерживается текущим компилятором. На этом описание core.h почти закончено, но оно было бы не полным без nullptr.
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Итак, продолжим.
Читать полностью »
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Глава 2
2018-07-13 в 11:37, admin, рубрики: boost, c++, c++03, c++11, c++98, loki, sfinae, велосипедостроение, грязные хаки, Компиляторы, кроссплатформенная разработка, макросы, ненормальное программирование, Разработка под Linux, разработка под windows, Совершенный код, стандартная библиотека
Краткое содержание предыдущих частей
Из-за ограничений на возможность использовать компиляторы C++ 11 и от безальтернативности boost'у возникло желание написать свою реализацию стандартной библиотеки C++ 11 поверх поставляемой с компилятором библиотеки C++ 98 / C++ 03.
Помимо стандартных заголовочных файлов type_traits, thread, mutex, chrono так же были добавлены nullptr.h реализующий std::nullptr_t и core.h куда были вынесены макросы, относящиеся к компиляторозависимому функционалу, а так же расширяющие стандартную библиотеку.
Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
Как я стандартную библиотеку C++11 писал или почему boost такой страшный. Введение
2018-07-12 в 16:04, admin, рубрики: boost, c++, c++03, c++11, c++98, loki, sfinae, велосипедостроение, грязные хаки, кроссплатформенная разработка, ненормальное программирование, Разработка под Linux, разработка под windows, Совершенный код, стандартная библиотека
Вместо предисловия
Пожалуй с этой картинки должно начинаться любое повествование о boost, Loki, самостоятельных, да и так же поставляемых с компиляторами реализациях стандартной библиотеки C++.
Да-да, и если вы думали что разработчики стандартной библиотеки для того же g++, clang, Visual Studio или, прости господи, C++ Builder (бывший Borland, а нынешний Embarcadero) — гуру, что не городят костылей, не ломают стандарт под свой компилятор и не пишут велосипедов, то, скорее всего, вы не так активно используете стандартную библиотеку C++ как вам казалось.
Статья написана как рассказ, и содержит много «воды» и отступлений, но я надеюсь, что мой опыт и получившийся код будет полезен тем, кто столкнулся с похожими проблемами при разработке на C++, особенно на старых компиляторах. Ссылка на GitHub с результатом на сегодня для нетерпеливых и нечитателей:
https://github.com/oktonion/stdex (коммиты и конструктивная критика приветствуются)
А теперь, обо всем по порядку.
Читать полностью »