Эффективный и современный C++ [Скотт Мейерс] (pdf) читать постранично, страница - 2
Книга в формате pdf! Изображения и текст могут не отображаться!
[Настройки текста] [Cбросить фильтры]
- 1
- 2
- 3
- 4
- . . .
- последняя (75) »
Эшли Морган Вильяме (Ashley Morgan Williams) готовила отличные обеды у себя
в Lake Oswego Pizzicato. Им (и ей) нет равных.
И более двадцати лет моя жена, Нэнси Л. Урбано (Nancy L. Urbano), как обычно во
время моей работы над новой книгой, терпит мою раздражительность и оказывает мне
всемерную поддержку. В ходе написания книги постоянным напоминанием о том, что за
пределами клавиатуры есть другая жизнь, служила мне наша собака Дарла.
14
Благодарности
Вв еден и е
Если вы - опытный программист на языке программирования С++, как, например,
я, то, наверное, первое, о чем вы подумали в связи с С++ 1 1 , - "Да, да, вот и он - тот же
С++, только немного улучшенный". Но познакомившись с ним поближе, вы, скорее все
го, были удивлены количеством изменений. Объявления auto, циклы for для диапазо
нов, лямбда-выражения и rvаluе-ссылки изменили лицо С++, - и это не говоря о новых
возможностях параллельности. Произошли и идиоматические изменения. О и t ypede f
уступили место nullptr и объявлениям псевдонимов. Перечисления получили области
видимости. Интеллектуальные указатели стали предпочтительнее встроенных; переме
щение объектов обычно предпочтител ьнее их копирования.
Даже без упоминания С++ 14 в С++ 1 1 есть что поизучать.
Что еще более важно, нужно очень многое изучить, чтобы использовать новые воз
можности эффективно. Если вам нужна базовая информация о "современных" возмож
ностях С++, то ее можно найти в избытке. Но если вы ищете руководство о том, как
использовать эти возможности для создания правильного, эффективного, сопровождае
мого и переносимого программного обеспечения, поиск становится более сложным. Вот
здесь вам и пригодится данная книга. Она посвящена не описанию возможностей С++ 1 1
и C++l4, а их эффективному применению.
Информация в книге разбита на отдельные разделы, посвященные тем или иным ре
комендациям. Вы хотите разобраться в разных видах вывода типов? Или хотите узнать,
когда следует (а когда нет) использовать объявление auto? Вас интересует, почему функ
ция-член, объявленная как const, должна быть безопасна с точки зрения потоков, как
реализовать идиому Pimpl с использованием st d: : un i que_pt r, почему следует из
бегать режима захвата по умолчанию в лямбда-выражениях или в чем различие между
st d : : а torniс и volа tilе? Ответы на эти вопросы вы найдете в книге. Более того, эти
ответы не зависят от платформы и соответствуют стандарту. Это книга о переносимом С++.
Разделы книги представляют собой рекомендации, а не жесткие правила, поскольку
рекомендации имеют исключения. Наиболее важной частью каждого раздела является
не предлагаемая в нем рекомендация, а ее обоснование. Прочитав раздел, вы сможете
сами определить, оправдывают ли обстоятельства вашего конкретного проекта отход
от данной рекомендации. Истинная цель книги не в том, чтобы рассказать вам, как надо
поступать или как поступать не надо, а в том, чтобы обеспечить вас более глубоким по
ниманием, как та или иная концепция работает в С++ 1 1 и С++ 1 4.
Терминоnо r ия и соrnашения
Чтобы мы правильно понимали друг друга, важно согласовать используемую терми
нологию, начиная, как ни странно это звучит, с термина "С++". Есть четыре официаль
ные версии С++, и каждая именуется с использованием года принятия соответствующего
стандарта ISO: С++98, С++ОЗ, C++l 1 и С++14. С+ +98 и С++ОЗ отличаются один от друго
го только техническими деталями, так что в этой книге обе версии я называю как С++98.
Говоря о С++ 1 1 , я подразумеваю и С++ 1 1 , и С++ 1 4, поскольку С++ 14 является надмно
жеством С++ 1 1 . Когда я пишу "С++ 1 4': я имею в виду конкретно С++ 14. А если я просто
упоминаю С++, я делаю утверждение, которое относится ко всем версиям языка.
Использованный термин
Подразумеваемая версия
(++
Все
(++98
с++98
и
с++03
(++11
(++11
и
(++14
(++14
(++14
В результате я мог бы сказать, что в С++ придается большое значение эффективности
(справедливо для всех версий), в С++98 отсутствует поддержка параллелизма (справед
ливо только для С++98 и С++ОЗ), С++ 1 1 поддерживает лямбда-выражения (справедливо
для C++l l и С++14) и С++14 предлагает обобщен ный вывод возвращаемого типа функ
ции (справедливо только для С++ 1 4).
Наиболее важной особенностью С++ 1 1 , вероятно, является семантика перемещения,
а основой семантики перемещения является отличие rvа/ие-выражени й от /vа/uе-выра
жений. Поэтому rvalue указывают объекты, которые могут быть перемещены, в то время
как lvalue в общем случае перемещены быть не могут. Концептуально (хотя и не всегда
на практике), rvalue соответствуют временным объектам, возвращаемым из функций,
в то время как lvalue соответствуют объектам, на которые вы можете ссылаться по име
ни, следуя указателю или lvalue-ccылкe.
Полезной эвристикой для выяснения, является ли выражение lvalue, является ответ
на вопрос, можно ли получить его адрес. Если можно, то обычно это lvalue. Если нет, это
обычно rvalue. Приятной
- 1
- 2
- 3
- 4
- . . .
- последняя (75) »
Последние комментарии
1 день 5 часов назад
1 день 10 часов назад
1 день 18 часов назад
1 день 21 часов назад
1 день 21 часов назад
3 дней 8 часов назад