Как любому C++ разработчику, следящему за новинками в отрасли и стандартами в частности, мне стало интересно, насколько полно вообще поддерживается стандарт C++ 11 (а также 1y и 1z) разными компиляторами? Да, существуют разные сводные таблицы, но чаще всего это сравнение двух компиляторов или двух версий одного компилятора, либо сводная таблица, но уже устаревшая, либо вообще неполный список. В общем, сел я да и сделал полную таблицу (на основе списка Clang-a и GCC) по четырем компиляторам: Clang, GNU C++, MSVC и Intel C++.Читать полностью »
Рубрика «c++11» - 9
Сериализация и С++11
2014-12-04 в 1:19, admin, рубрики: c++, c++11, ненормальное программирование, Программирование, сериализация
Уверен, что многим кто работает с С++ хотелось, чтобы в этом, дивном языке, была возможность сериализовать объекты так же просто, как скажем в С#. Вот и мне этого захотелось. И я подумал, а почему бы и нет, с помощью нового стандарта это должно быть несложно. Для начала стоит определиться с тем, как это должно выглядеть.
class Test : public Serializable
{
public:
int SomeInt = 666;
float SomeFloat = 42.2;
string SomeString = "Hello My Little Pony";
private:
serialize(SomeInt);
serialize(SomeFloat);
serialize(SomeString);
};
Такое мне вполне подходило, и я уже представлял себе решение.
Читать полностью »
Атомарные и неатомарные операции
2014-12-03 в 9:31, admin, рубрики: c++, c++11, std::atomic, многопоточное программирование, параллельное программирование, перевод
В Сети уже очень много написано об атомарных операциях, но в основном авторы рассматривают операции чтения-модификации-записи. Однако, существуют и другие атомарные операции, например, атомарные операции загрузки (load) и сохранения (store), которые не менее важны. В этой статье я сравню атомарные загрузки и сохранения с их неатомарными аналогами на уровне процессора и компилятора C/C++. По ходу статьи мы также разберемся с концепцией «состояния гонок» с точки зрения стандарта C++11.
Читать полностью »
Eggs.Variant — Часть I
2014-11-30 в 15:58, admin, рубрики: c++, c++11, C++14, Eggs.Variant, Проектирование и рефакторинг, размеченное объединениеНа публикацию этого перевода меня сподвиг комментарий пользователя encyclopedist к недавней статье «Фабричный метод без размещения в динамической памяти». Статья меня заинтересовала, но беглое гугление не выявило перевода. «Непорядок.» — подумал я — «Такая интересная статья по С++ и не переведена на русский язык. Надо бы исправить.»
Оглавление
Размышления о разработке Eggs.Variant — обобщённом типобезопасном размеченном объединении на C++11/14.
Введение
Объединение — это специальный тип класса, который в один момент времени может хранить только один из своих нестатических членов. Он занимает столько места, сколько надо, чтобы вместить наибольший из его членов.
9 [class]/5 Объединение — это класс, определяемый с ключевым словом
union
; одновременно он может хранить только один из своих членов (9.5). [...]
9.5 [class.union]/1 В объединении активным может быть только один из нестатических членов, то есть, в данный момент времени в объединении может храниться значение только одного из его нестатических членов. [...] Размер объединения достаточен для вмещения наиболее большого из его нестатических членов. Каждый нестатический член аллоцируется так, словно он является единственным членом структуры. Все нестатические члены объекта объединения имеют одинаковый адрес.
9 [class]/5 A union is a class defined with the class-key union; it holds at most one data member at a time (9.5). [...]
9.5 [class.union]/1 In a union, at most one of the non-static data members can be active at any time, that is, the value of at most one of the non-static data members can be stored in a union at any time. [...] The size of a union is sufficient to contain the largest of its non-static data members. Each non-static data member is allocated as if it were the sole member of a struct. All non-static data members of a union object have the same address.
Фабричный метод без размещения в динамической памяти
2014-11-28 в 21:35, admin, рубрики: c++, c++11, ненормальное программирование, ооп, Проектирование и рефакторинг, фабричный метод У классической реализации фабричного метода на C++ есть один существенный недостаток — используемый при реализации этого шаблона динамический полиморфизм предполагает размещение объектов в динамической памяти. Если при этом размеры создаваемых фабричным методом объектов не велики, а создаются они часто, то это может негативно сказаться на производительности. Это связанно с тем, что во первых оператор new
не очень эффективен при выделении памяти малого размера, а во вторых с тем что частая деаллокация небольших блоков памяти сама по себе требует много ресурсов.
Для решения этой проблемы было бы хорошо сохранить динамический полиморфизм (без него реализовать шаблон не получится) и при этом выделять память на стеке.
Если вам интересно, как это у меня получилось, добро пожаловать под кат.
Бесплатный CppCat для студентов
2014-11-13 в 13:04, admin, рубрики: c++, c++/cx, c++11, cppcat, pvs-studio, Visual Studio, Блог компании PVS-Studio, инструменты разработчика, Си, статический анализ кода, халява, халява студентам
CppCat – это статический анализатор кода, интегрирующийся в среду Visual Studio 2010-2013. Анализатор предназначен для регулярного использования и позволяет выявить множество ошибок и опечаток в программах на языке Си и Си++. С целью его популяризации мы решили выдавать бесплатные лицензии всем студентам, которые к нам обратятся. Достаточно прислать фотографию студенческого билета или зачётной книжки.
Читать полностью »
Был у меня в одном проекте класс-обертка над log4cpp. В один прекрасный день посчитал, что его интерфейс перестал мне нравится, решил немного переделать, потом переделал еще немного. Потом мне пришла мысль, почему бы не использовать обобщенное программирование? И тут завертелось… а нужно мне было только вариативное поведение логирования, то есть, вывод на экран или в файл или еще куда либо в зависимости от выбранного типа.
Идеальная передача и универсальные ссылки в C++
2014-11-08 в 20:37, admin, рубрики: c++, c++11, rvalue, std::forward Недавно на isocpp.org была опубликована ссылка на статью Eli Bendersky «Perfect forwarding and universal references in C++». В этой небольшой статье есть простой ответ на простой вопрос — для решения каких задач и как нужно использовать rvalue.
Читать полностью »
Всем привет!
Намедни был отчёт о CppCon, я решил напомнить, что у нас тоже жизнь кипит, пусть и не в таком масштабе.
Несколько раз я уже писал на Хабре про встречи C++ User Group. Многим в этом хабе я спамил в инбоксы приглашая их на встречи, надеюсь, без обид.
Читать полностью »