суббота, 8 декабря 2012 г.

Презентация по C++11 часть 1: Rvalue-ссылки

    Придет день и компиляторы будут полностью поддерживать С++11,
Но радоваться этому будут уже другие, более совершенные существа...

    В этой статье приведены материалы первой части моей презентации о С++11, а именно, о Rvalue-ссылках. Однако кроме вопросов, которые мы рассмотрели на митинге (Move Semantics), здесь также приведены дополнительные материалы о Forwarding Problem и Perfect Forwarding.
    Вы сможете сами листать слайды презентации и смотреть мои комментарии к ним. Неочевидные моменты/конструкции я постарался объяснить отдельно. Также здесь я привожу ссылки по теме, которые обещал или которые могут быть вам интересны.
    Если у вас возникнут вопросы по теме, буду рад ответить на них в комментариях к статье. Надеюсь, что приведенная информация окажется полезной для вас.

вторник, 24 апреля 2012 г.

Полный ноль (С++,С++11,C++/CLI)

Полковник курсантам: 
- Характеристики аппаратуры: функционирует при температурах от -300°C до +300°С. 
Голос из зала: - Извините, но ученые не знают таких температур, абсолютный ноль -273°С. 
- Аппаратура секретная, ученые могли и не знать!

    В новый стандарт С++11 было добавлено ключевое слово nullptr, идентифицирующее нулевой указатель. В этой статье приведен подробный обзор nullptr. Мы обсудим причины появления нового "нуля", его характеристики и некоторые возможные ошибки, возникающие при использовании различных "нулей".  Рассмотрим особенности использования nullptr в С++/CLI и, наконец, рассмотрим идиомы, связанные с nullptr, позволяющие использовать некоторые его преимущества в средах, которые не поддерживают новый стандарт.

четверг, 22 марта 2012 г.

Неявный вызов конструктора копирования (С++)


- Какая разница между пуганой вороной и письменным столом?
"Вот это совсем другой разговор! - подумала Алиса.- Загадки-то я люблю! Поиграем!"
- Кажется, сейчас отгадаю,- прибавила она вслух.
- Ты думаешь, что могла бы отыскать отгадку? - удивленно спросил Заяц...
                 Льюис Керролл "Алиса в стране чудес"

Чем отличается выражение
1)     Entity cowedCrow( 1);
от выражения
2)     Entity desk = 1;
кроме названия объектов, конечно же?
На удивление многие программисты дают неверный ответ. Менее опытные ошибочно полагают, что во втором случае сначала вызывается конструктор без аргументов, а затем оператор присваивания. Более опытные наивно полагают, что данные выражения эквивалентны (по сути, не отличаются). И, наконец, опытные убеждены, что знают правильный ответ, и готовы прекратить чтение статьи.
Что же, попробуем доставить немного удовольствия опытным программистам, а заодно и развеять заблуждения менее опытных.

воскресенье, 4 марта 2012 г.

Идиома Accessor (C++)

Введение

Идея управления доступом к классу путем использования наследования и внутренних классов пришла ко мне во время работы над одним из проектов. Вполне возможно, что данная идиома уже открыта и используется, однако мне об этом пока ничего не известно. Я буду очень признателен за любую информацию, связанную с данной идиомой.  (см. UPD в конце статьи).
Я благодарю Евгения Слепова, моего коллегу, который оказал мне большую помощь в подготовке данного материала. 

Название и классификация

Акцессор – идиома.

Назначение

Разграничивает интерфейс класса, позволяя без дальнейшей модификации класса указывать, какие клиенты должны иметь доступ к его конкретным (привилегированным) частям.