В этом посте пойдет речь об одной интересной фичи в C++11, которая называется делегирующие конструкторы (delegating constructors): почему она интересна, и как ее можно применить для более эффективного управления ресурсами, т.е. реализации идиомы RAII.
Рубрика «c++11» - 16
RAII и делегирующие конструкторы в C++11
2012-11-04 в 4:21, admin, рубрики: c++, c++11, constructor, raii, метки: c++, c++11, constructor, delegaте, raiiПрезентация Герба Саттера про Visual C++ и C++11 на конференции BUILD
2012-11-03 в 0:35, admin, рубрики: c++, c++11, visual c++, метки: c++11, visual c++
Фото Channel9
Только что на Channel 9 закончилась презентация Герба Саттера на конференции BUILD в Редмонде. Кому интересен конспект его выступления с последними новостями про Visual C++ и C++11 в целом — прошу под кат.
Демонстрация сбоев программы при отсутствии барьеров памяти
2012-10-20 в 20:35, admin, рубрики: c++, c++11, lock-free, mobile development, многопоточность, параллельное программирование, метки: c++11, lock-free, АРМ, многопоточность, параллельное программированиеДжефф Прешинг (Jeff Preshing) опубликовал отличную демонстрацию, как нормальный код C++ возвращает непредсказуемый результат на процессорах со слабо упорядоченной обработкой очереди запросов (Weakly-Ordered CPU), то есть на всех многоядерных ARM-процессорах. Например, на iPhone или каком-нибудь современном Android-устройстве.
Простая программа C++ с двумя потоками 20.000.000 раз прибавляет единичку к значению, защищённому мьютексом, — и каждый раз на выходе получается разный результат, который меньше 20.000.000!
Как говорится, наш враг — CPU.
Читать полностью »
«Концепты» на C++
2012-09-14 в 17:24, admin, рубрики: c++, c++11, ненормальное программирование, метки: c++, c++11Всем доброго времени суток.
Придумано и написоно под влиянием некоторых публикаций Страуструпа на тему концептов в C++.
Захотелось мне однажды необычного — сделать так, чтобы нешаблонные функции/методы на C++ могли принимать в качестве аргумента любой объект, имеющий определенный набор методов, примерно так:
void fn(VectorWrapper<int> x)
{
for (size_t i = 0; i < x.size(); ++i)
{
doSomething(x[i]);
}
}
::std::vector<int> sv;
QList<int> qv;
OtherSuperVector<int> ov;
fn(sv);
fn(qv);
fn(ov);
Причем сделать это не используя наследование от базового класса.
Как это можно сделать, читайте под катом.
Читать полностью »
Организация подсистем в С++
2012-08-01 в 12:12, admin, рубрики: c++, c++11, Песочница, Программирование, программирование как искусство, С++, метки: c++11, программирование как искусство, С++ При разработке любой программы сложнее чем простейшая утилита командной строки встает вопрос об организации подсистем и их взаимодействии. Он включает в себя декомпозицию функционала программы на подсистемы и организацию способа их взаимодействия. Именно об организации взаимодействия подсистем, а так же управления их созданием и удалением будет идти речь в статье.
Читать полностью »
Методы, как first class citizens в C++
2012-06-12 в 12:09, admin, рубрики: c++, c++11, ненормальное программирование, метки: c++, c++11На днях, гуляя по багтрекеру gcc наткнулся на интересный баг, в нем используется сразу несколько возможностей C++11:
- std::function — механизм для создания функторов — объектов функций
- non static member initialisation — механизм для инициализации членов класса вне конструктора
- lambda — тут и так все ясно. Исчерпывающие статьи были здесь.
Анализируя этот баг, я подумал, что теперь можно удобно реализовать методы как first class citizens Читать полностью »
Алгоритм параллельного поиска максимальных, общих подстрок в двух строках, и его имплементация на C++ (C++11)
2012-06-04 в 15:13, admin, рубрики: c++, c++11, Алгоритмы, Программирование, метки: c++, c++11, Алгоритмы, ПрограммированиеРешил написать статью про алгоритм параллельного поиска максимально возможных пересечений двух строк. К написанию этой статьи, меня побудило два желания:
- Поделиться со всеми интересным алгоритмом и его имплементацией на С++ (стандарт С++11);
- Узнать есть ли у данного алгоритма название и/или формальное описание;
Про QStringLiteral
2012-05-29 в 11:11, admin, рубрики: c++, c++11, QLatin1String, QStringLiteral, Qt Software, qt5QStringLiteral — это новый макрос, введенный в Qt 5, для создания объектов QString из строковых литералов. (Строковые литералы — это строки внутри кавычек в исходном коде). В этой статье я объясню, что там внутри и как они реализованы.
Выводы
Разрешите начать с информации о том, когда нужно пользоваться макросом. Если есть необходимость инициализировать объект QString из строкового литерала в Qt5, то стоит делать так:
- В большинстве случаев QStringLiteral(«foo») если он действительно будет преобразован в QString.
- QLatin1String(«foo») если он будет использоваться в перегруженных QLatin1String методах. (например operator==, operator+, startWith, replace, ...)
Я привел выводы в самом начале статьи для тех, кому не интересны технические детали.
Если интересно узнать, как работает QStringLiteral, читайте дальше.
Читать полностью »
Type-rich Programming
2012-05-22 в 17:51, admin, рубрики: best practice, c++, c++11, style guide, Программирование, Совершенный код, метки: best practice, c++11, style guide Посмотрев конференцию GoingNative 2012 решил попытаться описать «best practice» для написания программ в стиле C++11. Планируется цикл статей, кому интересно, auto articlesIterator = articles.begin();
Читать полностью »