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

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

Интервал:

Закладка:

Сделать

В С++11 два ограничения предотвращают объявление функций-членов Point setXи setYкак constexpr. Во-первых, они модифицируют объект, с которым работают, а в С++11 функции-члены constexprнеявно являются const. Во-вторых, они имеют возвращаемый тип void, а voidне является литеральным типом в С++11. Оба эти ограничения сняты в С++14, так что в С++14 даже функции установки полей Pointмогут быть объявлены как constexpr:

class Point {

public:

constexprvoid setX(double newX) noexcept // С++14

{ x = newX;}

constexpr void setY(double newY) noexcept // С++14

{ y = newY; }

};

Это делает возможным написание функций наподобие следующей:

// Возвращает отражение точки p

// oтнocитeльнo начала координат (С++14)

constexpr Point reflection(const Point& p) noexcept {

Point result; // Нeкoнcтантный объект Point

result.setX(-p.xValue()); // Установка его полей x и y

result.setY(-p.yValue());

return result; // Возврат копии

}

Соответствующий клиентский код имеет вид:

constexpr Point p1(9.4, 27.7); // Как и выше

constexpr Point p2(28.8, 5.3);

constexpr auto mid = midpoint(p1, p2);

constexpr auto reflectedMid = // reflectedMid пpeдcтавляeт

reflection(mid); // собой (-19.1 -16.5) и

// известно во время компиляции

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

Важно отметить, что constexprявляется частью интерфейса объекта или функции. constexprпровозглашает: “Меня можно использовать в контексте, где для С++ требуется константное выражение”. Если вы объявляете объект или функцию как constexpr, клиенты могут использовать их в указанных контекстах. Если позже вы решите, что такое использование constexprбыло ошибкой, и удалите его, то это может привести к тому, что большое количество клиентского кода перестанет компилироваться. (Простое действие, заключающееся в добавлении в функцию отладочного вывода для отладки или настройки производительности может привести к таким проблемам, поскольку инструкции ввода-вывода в общем случае в constexpr-функциях недопустимы.) Часть “где это возможно” совета является вашей доброй волей на придание долгосрочного характера данному ограничению на объекты и функции, к которым вы его применяете.

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

• Объекты constexprявляются константными и инициализируются объектами, значения которых известны во время компиляции.

• Функции constexprмогут производить результаты времени компиляции при вызове с аргументами, значения которых известны во время компиляции.

• Объекты и функции constexprмогут использоваться в более широком диапазоне контекстов по сравнению с объектами и функциями, не являющимися constexpr.

constexprявляется частью интерфейса объектов и функций.

3.10. Делайте константные функции-члены безопасными в смысле потоков

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

class Polynomial {

public:

using RootsType = // Структура данных, хранящая

std::vector; // значения, где полином равен нулю

… // (см. "using" в разделе 3.3)

RootsType roots() const;

};

Вычисление корней — трудная дорогостоящая операция, так что мы не хотим их вычислять до того, как они реально потребуются. Но если они нам требуются, то, определенно, требуются не один раз. Поэтому мы будем кешировать корни полиномов, если нам приходится их вычислять, и реализуем rootsтак, чтобы функция возвращала кешированное значение. Вот как выглядит такой подход:

class Polynomial {

public:

using RootsType = std::vector;

RootsType roots() const {

if (!rootsAreValid) { // Если кеш некорректен,

… // вычисляем корни и сохраняем

// их в in rootVals

rootsAreValid = true;

}

return rootVals;

}

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

Интервал:

Закладка:

Сделать

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

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


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

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

x