Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14

Здесь есть возможность читать онлайн «Скотт Мейерс - Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2016, ISBN: 2016, Издательство: Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Эффективный и современный С++
В книге рассматриваются следующие темы. Освоение С++11 и С++14 — это больше, чем просто ознакомление с вводимыми этими стандартами возможностями (например, объявлениями типов
, семантикой перемещения, лямбда-выражениями или поддержкой многопоточности). Вопрос в том, как использовать их эффективно, чтобы создаваемые программы были корректны, эффективны и переносимы, а также чтобы их легко можно было сопровождать. Именно этим вопросам и посвящена данная книга, описывающая создание по-настоящему хорошего программного обеспечения с использованием C++11 и С++14 — т.е. с использованием современного С++.
■ Преимущества и недостатки инициализации с помощью фигурных скобок, спецификации
, прямой передачи и функций
интеллектуальных указателей
■ Связь между
,
, rvalue-ссылками и универсальными ссылками
■ Методы написания понятных, корректных,
лямбда-выражений
■ Чем
отличается от
, как они используются и как соотносятся с API параллельных вычислений С++
■ Какие из лучших методов “старого” программирования на С++ (т.е. С++98) должны быть пересмотрены при работе с современным С++
Более чем 20 лет книги
серии
являются критерием уровня книг по программированию на С++. Понятное пояснение сложного технического материала принесло ему всемирную известность. Он всегда самый желанный гость на международных конференциях, а его услуги консультанта широко востребованы во всем мире.
Скотт Мейерс Эффективный и современный С++, После изучения основ С++ я перешел к изучению того, как применять С++ в промышленном программировании, с помощью серии книг Скотта Мейерса Эффективный С++. Эффективный и современный С++ — наиболее важная из книг серии, предлагающая ключевые рекомендации, стили и идиомы, позволяющие эффективно использовать современный С++. Вы еще не купили эту книгу? Сделайте это прямо сейчас. Герб Саттер,
глава Комитета ISO по стандартизации С++, специалист в области архитектуры программного обеспечения на С++ в Microsoft

Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

typename remove_reference::type&&

move(T&& param) {

using ReturnType = // Объявление псевдонима; см. раздел 3.3

typename remove_reference::type&&

return static_cast(param);

}

Я выделил здесь две части кода. Одна — имя функции, потому что спецификация возвращаемого типа достаточно запутанна, и я бы не хотел, чтобы вы в ней заблудились. Вторая — приведение, которое составляет сущность функции. Как вы можете видеть, std::moveполучает ссылку на объект (чтобы быть точным — универсальную ссылку; см. раздел 5.2) и возвращает ссылку на тот же объект.

Часть &&возвращаемого типа функции предполагает, что std::moveвозвращает rvalue-ссылку, но, как поясняется в разделе 5.6, если тип Tявляется lvalue-ссылкой, T&&становится lvalue-ссылкой. Чтобы этого не произошло, к Tприменяется свойство типа (см. раздел 3.3) std::remove_reference, тем самым обеспечивая применение “ &&” к типу, не являющемуся ссылкой. Это гарантирует, что std::moveдействительно возвращает rvalue-ссылку, и это важно, поскольку rvalue-ссылки, возвращаемые функциями, являются rvalue. Таким образом, std::moveприводит свой аргумент к rvalue, и это все, что она делает.

В качестве небольшого отступления скажем, что std::moveможно реализовать в С++14 меньшими усилиями. Благодаря выводу возвращаемого типа функции (см. раздел 1.3) и шаблону псевдонима std::remove_reference_t(см. раздел 3.3) std::moveможно записать следующим образом:

template // С++14; находится в

decltype(auto)move(T&& param) // пространстве имен std

{

using ReturnType = remove_reference_t&&

return static_cast(param);

}

Легче для восприятия, не так ли?

Поскольку std::moveничего не делает, кроме приведения своего аргумента к rvalue, были предложения дать этому шаблону другое имя, например rvalue_cast. Как бы там ни было, у нас имеется имя std::move, так что нам важно запомнить, что это имя std::moveделает и чего не делает. Итак, оно выполняет приведение. И оно ничего не переносит.

Конечно, rvalue являются кандидатами на перемещение, поэтому применение std::moveдля объекта сообщает компилятору, что объект предназначается для перемещения. Вот почему std::moveимеет такое имя: чтобы легко распознавать объекты, которые могут быть перемещены.

По правде говоря, rvalue обычно являются всего лишь кандидатами для перемещения. Предположим, что вы пишете класс, представляющий аннотации. Конструктор класса получает параметр std::string, представляющий аннотацию, и копирует значение параметра в член-данные. С учетом информации из раздела 8.1 вы объявляете параметр как передаваемый по значению:

class Annotation {

public:

explicit Annotation( std::stringtext); // Параметр

… // копируемый, так что согласно

}; // разделу 8.1 он передается по значению

Но конструктору Annotationтребуется только прочесть значение text. Ему не нужно его модифицировать. В соответствии с освященной веками традицией использования constвезде, где только можно, вы переписываете свое объявление, делая textконстантой:

class Annotation

public:

explicit Annotation( conststd::string text);

};

Чтобы избежать дорогостоящей операции копирования textв член-данные, вы оставляете в силе совет из раздела 8.1 и применяете std::moveк text, тем самым получая rvalue:

class Annotation {

public:

explicit Annotation(const std::string text)

: value( std::move(text)) // "Перемещение" text в value;

{ … } // этот код не делает того,

… // что от него ожидается!

private:

std::string value;

};

Этот код компилируется. Этот код компонуется. Этот код выполняется. Этот код устанавливает значение члена-данных valueравным содержимому строки text. Единственное, что отличает этот код от идеальной реализации ваших намерений, — то, что textне перемещается в value, а копируется . Конечно, textприводится к rvalue с помощью std::move, но textобъявлен как const std::string, так что перед приведением textявлялся lvalue типа const std::string, так что результатом приведения является rvalue типа const std::string, и на протяжении всех этих действий константность сохраняется.

Рассмотрим, как компиляторы определяют, какой из конструкторов std::stringдолжен быть вызван. Есть две возможности:

class string { // std::string в действительности представляет

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14»

Представляем Вашему вниманию похожие книги на «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14»

Обсуждение, отзывы о книге «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x