Скотт Мейерс - Эффективный и современный С++. 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», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

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

Интервал:

Закладка:

Сделать

К сожалению, результат std::type_info::nameненадежен. Например, в данном случае тип, который все три компилятора приписывают param, является неверным. Кроме того, он по сути обязан быть неверным, так как спецификация std::type_info::nameразрешает, чтобы тип рассматривался как если бы он был передан в шаблонную функцию по значению. Как поясняется в разделе 1.1, это означает, что если тип является ссылкой, его “ссылочность” игнорируется, а если тип после удаления ссылочности оказывается const(или volatile), то соответствующие модификаторы также игнорируются. Вот почему информация о типе param— который на самом деле представляет собой const Widget* const&— выводится как const Widget*. Сначала удаляется ссылочность, а затем у получившегося указателя удаляется константность.

Не менее печально, что информация о типе, выводимая редакторами IDE, также ненадежна — или как минимум ненадежно полезна. Для этого же примера мой редактор IDE сообщает о типе Ткак (я не придумываю!):

const

std::_Simple_types

std::allocator >::_Alloc>::value_type>::value_type *

Тот же редактор IDE показывает, что тип param следующий:

const std::_Simple_types<...>::value_type *const &

Это выглядит менее страшно, чем тип Т, но троеточие в средине типа сбивает с толку, пока вы не поймете, что это редактор IDE попытался сказать “Я опускаю все, что является частью типа T”. Ваша среда разработки, быть может, работает лучше моей — если вы достаточно везучий.

Если вы склонны полагаться на библиотеки больше, чем на удачу, то будете рады узнать, что там, где std::type_info::nameи IDE могут ошибаться, библиотека Boost TypeIndex (часто именуемая как Boost.TypeIndex ) приведет к успеху. Эта библиотека не является частью стандарта С++, но точно так же частью стандарта не являются ни IDE, ни шаблоны наподобие рассмотренного выше TD. Кроме того, тот факт, что библиотеки Boost (доступные по адресу boost.org) являются кроссплатформенными, с открытым исходным кодом и с лицензией, разработанной так, чтобы быть приемлемой даже для самых параноидальных юристов, означает, что код с применением библиотек Boost переносим практически так же хорошо, как и код, основанный на стандартной библиотеке.

Вот как наша функция fможет выдать точную информацию о типах с использованием Boost.TypeIndex:

#include

template

void f(const T& param) {

using std::cout;

using boost::typeindex::type_id_with_cvr;

// Вывод информации о Т

cout << "Т = "

<< type_id_with_cvr().pretty_name()

<< '\n';

// Вывод информации о типе param

cout << "param = "

<< type_id_with_cvr().pretty_name()

<< '\n';

}

Как это работает? Шаблон функции boost::typeindex::type_id_with_cvrполучает аргумент типа (тип, о котором мы хотим получить информацию) и не удаляет const, volatileили квалификатор ссылки (о чем и говорит “ with_cvr” в имени шаблона). Результатом является объект boost::typeindex::type_index, функция-член pretty_nameкоторого дает std::stringс удобочитаемым представлением типа.

При такой реализации fобратимся вновь к вызову, который давал нам неверную информацию о типе paramпри использовании typeid:

std::vector createVec(); // Фабричная функция

const auto vw = createVec(); // Инициализация vw с помощью

// фабричной функции

if (!vw.empty()) {

f(&vw[0]); // Вызов f

}

После компиляции с помощью компиляторов GNU и Clang Boost.TypeIndex дает следующий (точный) результат:

Т = Widget const*

param = Widget const* const&

Применение компилятора Microsoft дает по сути то же самое:

Т = class Widget const *

param = class Widget const * const &

Такое единообразие — это хорошо, но важно помнить, что редакторы IDE, сообщения об ошибках компилятора и библиотеки наподобие Boost.TypeIndex являются всего лишь инструментами, которые можно использовать для выяснения того, какие типы выводит ваш компилятор. Это может быть полезно, но не может заменить понимания информации о выводе типов, приведенной в разделах 1.1–1.3.

Следует запомнить

• Выводимые типы часто можно просмотреть с помощью редакторов IDE, сообщений об ошибках компиляции и с использованием библиотеки Boost.TypeIndex.

• Результаты, которые выдают некоторые инструменты, могут оказаться как неточными, так и бесполезными, так что понимание правил вывода типов в С++ является совершенно необходимым.

Глава 2

Объявление auto

Концептуально объявление autoнастолько простое, насколько может быть, но все же сложнее, чем выглядит. Его применение экономит исходный текст, вводимый программистом, но при этом предупреждает появление вопросов корректности и производительности, над которыми вынужден мучиться программист при ручном объявлении типов. Кроме того, некоторые выводы типов auto, хотя и послушно соблюдают предписанные алгоритмы, дают результаты, некорректные с точки зрения программиста. Когда такое происходит, важно знать, как привести autoк верному ответу, поскольку возврат к указанию типов вручную — альтернатива, которой чаще всего лучше избегать. В этой короткой главе описаны основы работы с auto.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x