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

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

Интервал:

Закладка:

Сделать

template

typename MuxType,

typename PtrType>

auto lockAndCall(FuncType func,

MuxType& mutex,

PtrType ptr) -> decltype(func(ptr)) {

using MuxGuard = std::lock_guard;

MuxGuard g(mutex);

return func(ptr);

}

Если возвращаемый тип этой функции ( auto...->decltype(func(ptr)) заставляет вас чесать затылок, обратитесь к разделу 1.3, в котором объясняется происходящее. Там вы узнаете, что в С++ 14 возвращаемый тип можно свести к простому decltype(auto):

template

typename MuxType,

typename PtrType>

decltype(auto) lockAndCall(FuncType func, // С++14

MuxType& mutex,

PtrType ptr) {

using MuxGuard = std::lock_guard;

MuxGuard g(mutex);

return func(ptr);

}

Для данного шаблона lockAndCall(любой из версий), вызывающий код может иметь следующий вид:

auto result1 = lockAndCall(f1, f1m, 0); // Ошибка!

auto result2 = lockAndCall(f2, f2m, NULL); // Ошибка!

auto result3 = lockAndCall(f3, f3m, nullptr); // OK

Такой код можно написать, но, как показывают комментарии, в двух случаях из трех этот код компилироваться не будет. В первом вызове проблема в том, что когда 0передается в lockAndCall, происходит вывод соответствующего типа шаблона. Типом 0является, был и всегда будет int, как и тип параметра ptrв инстанцировании данного вызова lockAndCall. К сожалению, это означает, что в вызов funcв lockAndCallпередается int, а этот тип несовместим с параметром std::shared_ptr, ожидаемым функцией f1. Значение 0, переданное в вызове lockAndCall, призвано представлять нулевой указатель, но на самом деле передается заурядный int. Попытка передать этот int функции f1как std::shared_ptrпредставляет собой ошибку типа. Вызов lockAndCallс 0оказывается неудачным, поскольку в шаблоне функции, которая требует аргумент типа std::shared_ptr, передается значение int.

Анализ вызова с переданным NULLпо сути такой же. Когда в функцию lockAndCallпередается NULL, для параметра ptrвыводится целочисленный тип, и происходит ошибка, когда целочисленный тип передается функции f2, которая ожидает аргумент типа std::unique_ptr.

В противоположность первым двум вызовам вызов с nullptrникакими неприятностями не отличается. Когда функции lockAndCallпередается nullptr, выведенным типом ptrявляется std::nullptr_t. При передаче ptrв функцию f3выполняется неявное преобразование std::nullptr_tв Widget*, поскольку std::nullptr_tнеявно преобразуется во все типы указателей.

Тот факт, что вывод типа шаблона приводит к “неверным” типам для 0и NULL(т.e. к их истинным типам, а не к представлению с их использованием нулевых указателей), является наиболее убедительной причиной для использования nullptrвместо 0или NULL, когда вы хотите представить нулевой указатель. При применении nullptrшаблоны не представляют собой никаких особых проблем. Вместе с тем фактом, что nullptrне приводят к неприятностям при разрешении перегрузки, которым подвержены 0и NULL, все это приводит к однозначному выводу — если вам нужен нулевой указатель, используйте nullptr, но не 0и не NULL.

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

• Предпочитайте применение nullptrиспользованию 0или NULL.

• Избегайте перегрузок с использованием целочисленных типов и типов указателей.

3.3. Предпочитайте объявление псевдонимов применению typedef

Я уверен, что мы можем сойтись на том, что применение контейнеров STL — хорошая идея, и я надеюсь, что раздел 4.1 убедит вас, что хорошей идеей является применение std::unique_ptr, но думаю, что ни один из вас не увлечется многократным написанием типов наподобие std::unique_ptr>. Одна мысль о таких типах лично у меня вызывает все симптомы синдрома запястного канала [3] Синдром запястного канала — неврологическое заболевание, проявляющееся длительной болью и онемением пальцев рук. Широко распространено представление, что длительная ежедневная работа на компьютере, требующая постоянного использования клавиатуры, является фактором риска развития синдрома запястного канала. — Примеч. пер . .

Избежать такой медицинской трагедии несложно, достаточно использовать typedef:

typedef

std::unique_ptr>

UPtrMapSS;

Но typedefслишком уж какой-то девяносто восьмой… Конечно, он работает и в С++11, но стандарт С++11 предлагает еще и объявление псевдонима (alias declaration):

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

Интервал:

Закладка:

Сделать

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

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


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

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

x