Главная » Просмотр файлов » С. Мейерс - Эффективный и современный C++

С. Мейерс - Эффективный и современный C++ (1114942), страница 4

Файл №1114942 С. Мейерс - Эффективный и современный C++ (С. Мейерс - Эффективный и современный C++) 4 страницаС. Мейерс - Эффективный и современный C++ (1114942) страница 42019-05-08СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

(Более узкое определение происходит из С++98, более ши­рокое - из C++ll.) Дальнейшее обобщение путем добавления указателей на функции­члены дает то, что известно как вызываемый объект (callaЫe object). Вообще говоря,-18В ведениеможно иrнорировать эти тонкие отличия и просто рассматривать функциональные и вы­зываемые объекты как сущности в С++, которые моrут быть вызваны с помощью неко­торой разновидности синтаксиса вызова функции.Функциональные объекты, создаваемые с помощью лямбда-выражений, известны какзамь1кания (closures). Различать лямбда-выражения и замыкания, ими создаваемые, при­ходится редко, так что я зачастую rоворю о них обоих как о лямбдах (lambda).

Точно также я редко различаю шаблоны функций (fuпction templates) (т.е. шаблоны, которые rе­нерируют функции) и шаблонные функции (template ftшctions) (т.е. функции, сrенериро­ванные из шаблонов функций). То же самое относится к шаблонам классов и шаблоннымклассам.Мноrие сущности в С++ моrут быть как объявлены, так и определены. Объявлениявводят имена и типы, не детализируя информацию о них, такую как их местоположениев памяти или реализация:extern intх;class Widget ;11 Объявление объекта11 Объявление класс аbool func ( const Widget& W); 11 Объявление функцииenшn class Color;11 Объявление перечисления11 с областью видимости11 ( см.

раздел 3.4)Определение предоставляет информацию о расположении в памяти и деталях реализации:intх;cla ss Widget)11 Определение объекта11 Определение класса;bool func ( const Widget& w){ return w . size ( ) < 1 0 ; 1 // Определение функцииenurn class Color{ Yellow, Red, Blue f ;11 Определение перечисленияОпределение можно квалифицировать и как объявление, так что, если только то, чтонечто представляет собой определение, не является действительно важным, я предпочи­таю использовать термин "объявление·:Сигнатуру функции я определяю как часть ее объявления, определяющую типыпараметров и возвращаемый тип. Имена функции и параметров значения не име­ют.

В приведенном выше примере сиrнатура функции func представляет собойbool (const Widget&) . Исключаются элементы объявления функции, отличные от ти­пов ее параметров и возвращаемоrо типа (например. noexcept или constexpr, еслитаковые имеются). (Модификаторы noexcept и constexpr описаны в разделах 3.8В ведение19и 3.9.) Официальное определение термина "сигнатура" несколько отличается от моего,но в данной книге мое определение оказывается более полезным.

(Официальное опреде­ление иногда опускает возвращаемый тип.)Новый стандарт С++ в общем случае сохраняет корректность кода, написанного для бо­лее старого стандарта, но иногда Комитет по стандартизации не рекомендует применять теили иные возможности. Такие возможности находятся в "камере смертников" стандартиза­ции и могут быть убраны из новых версий стандарта.

Компиляторы могут предупреждатьоб использовании программистом таких устаревших возможностей (но могут и не делатьэтого), но в любом случае их следует избегать. Они могут не только привести в будущемк головной боли при переносе, но и в общем случае они ниже по качеству, чем возмож­ности, заменившие их. Например, st d : : a ut o _pt r не рекомендуется к применениюв C++ l l , поскольку std:: unique_pt r выполняет ту же работу, но лучше.Иногда стандарт гласит, что результатом операции является неопределенное поведе­ние (undefined behavior).

Это означает, что поведение времени выполнения непредсказу­емо, и от такой непредсказуемости, само собой разумеется, следует держаться подальше.Примеры действий с неопределенным поведением включают использование квадратныхскобок ( []) для индексации за границами std: :vec t o r, разыменование неинициали­зированного итератора или гонку данных (т.е. когда два или более потоков, как минимумодин из которых выполняет запись, одновременно обращаются к одному и тому же ме­сту в памяти).Я называю встроенный указатель, такой как возвращаемый оператором new, обычнымуказателем (raw pointer). Противоположностью обычному указателю является интеллек­туальный указатель (smart pointer).

Интеллектуальные указатели обычно перегружаютоператоры разыменования указателей (oper a t o r-> и opera t o r*), хотя в разделе 4.3поясняется, что интеллектуальный указатель std::weak_ptr является исключением.Зам е ча н ия и пр едл ож ен ияЯ сделал все возможное, чтобы книга содержала только ясную, точную, полезную ин­формацию, но наверняка есть способы сделать ее еще лучшей.

Если вы найдете в кни­ге ошибки любого рода (технические, разъяснительные, грамматические, типографскиеи т.д.) или если у вас есть предложения о том, как можно улучшить книгу, пожалуйста,напишите мне по адресу ernc++@a r i st e i a . сот. В новых изданиях книги ваши замеча­ния и предложения обязательно будут учтены.Список исправлений обнаруженных ошибок можно найти по адресу ht tp://www.a rist eia.corn/BookErra t a /ernc++-erra t a .htrnl.О т р едакцииРедакция выражает признательность профессору университета Иннополис Е. Зуеву заобсуждения и советы при работе над переводом данной книги.20В ведениеЖде м ва ши х отзывов!Вы, читатель этой книги, и есть главный ее критик. Мы ценим ваше мнение и хотимзнать, что было сделано нами правильно, что можно было сделать лучше и что еще выхотели бы увидеть изданным нами.

Нам интересны любые ваши замечания в наш адрес.Мы ждем ваших комментариев и надеемся на них. Вы можете прислать нам бумажноеили электронное письмо либо просто посетить наш веб-сайт и оставить свои замечаниятам. Одним словом, любым удобным для вас способом дайте нам знать, нравится ли вамэта книга, а также выскажите свое мнение о том, как сделать наши книги более интерес­ными для вас.Отправляя письмо или сообщение, не забудьте указать название книги и ее авторов,а также свой обратный адрес. Мы внимательно ознакомимся с вашим мнением и обяза­тельно учтем его при отборе и подготовке к изданию новых книг.Наши электронные адреса:E-mail:WWW:i nfo@wi ll i amspuЫ i sh i ng.comhtt p://www .

wi ll i ams puЫ i s h i ng . comНаши почтовые адреса:в России: 1 27055, Москва, ул. Лесная, д. 43, стр. 1в Украине: 03 1 50, Киев, а/я 1 52Введение21ГЛАВА 1Выв од т и п о вВ С++98 имеется единственный набор правил вывода типов - для шаблонов функ­ций. С++ 1 1 немного изменяет этот набор правил и добавляет два новых - для auto и дляdecltype. С++ 14 расширяет контексты использования ключевых слов auto и decltype.Все более широкое применение вывода типов освобождает вас от необходимости пра­вильной записи очевидных или излишних типов.

Он делает программы на С++ болеелегко адаптируемыми, поскольку изменение типа в одной точке исходного текста авто­матически распространяется с помощью вывода типов на другие точки. Однако он можетсделать код более сложным для восприятия, так как выводимые компилятором типы мо­гут не быть настолько очевидными, как вам бы хотелось.Без ясного понимания того, как работает вывод типов, эффективное программиро­вание на современном С++ невозможно. Просто есть слишком много контекстов, в ко­торых имеет место вывод типа: в вызовах шаблонов функций, в большинстве ситуаций,в которых встречается ключевое слово aut o, в выражениях decltype и, начиная с С++ 14,там, где применяется загадочная конструкция decltype (auto).Эта глава содержит информацию о выводе типов, которая требуется каждому раз­работчику на языке программирования С++.

Здесь поясняется, как работает вывод типашаблона, как строится auto и как проходит свой путь decltype. Здесь даже объясняется,как заставить компилятор сделать видимыми результаты своего вывода типа, чтобы убе­диться, что компилятор выводит именно тот тип, который вы хотели.1.1 . Вывод типа шаблонаКогда пользователи сложной системы не знают, как она работает, но их устраивает то,что она делает, это говорит об удачном проектировании системы. Если мерить такой ме­рой, то вывод типа шаблона в С++ является огромным успехом. Миллионы программис­тов передают аргументы шаблонным функциям с вполне удовлетворительными резуль­татами несмотря на то, что многие из этих программистов не способны на большее, чемочень приближенное и расплывчатое описание того, как же были выведены эти типы.Если вы относитесь к числу этих программистов, у меня для вас две новости - хоро­шая и плохая.

Хорошая новость заключается в том, что вывод типов для шаблонов явля­ется основой для одной из наиболее привлекательных возможностей современного С++:auto. Если вас устраивало, как С++98 выводит типы для шаблонов, вас устроит и то, какС++ 1 1 выводит типы для auto. Плохая новость заключается в том, что когда правилавывода типа шаблона применяются в контексте auto, они оказываются немного менееинтуитивными, чем в приложении к шаблонам. По этой причине важно действительнопонимать аспекты вывода типов шаблонов, на которых построен вывод типов для auto.Этот раздел содержит информацию, которую вы должны знать.Если вы готовы посмотреть сквозь пальцы на применение небольшого количествапсевдокода, то можно рассматривать шаблон функции как имеющий следующий вид:template<typename Т>void f(Param7YPE1 param) ;Вызов может выглядеть следующим образом:f (expr);11 Вызов fснекоторым выражениемВ процессе компиляции компилятор использует expr для вывода двух типов: типаи типа ParamT ype.

Эти типы зачастую различны, поскольку Pa ramType часто содер­жит "украшения", например const или квалификаторы ссылки. Например, если шаблонобъявлен какТternplate<typename Т>void f(const Т& param) ;//ParamType-const Т&и мы осуществляем вызовintхО;f (х);11 Вызов f с параметром intто Т выводится как int, а ParamTypeкак const i n t & .Вполне естественно ожидать, что тип, выведенный для Т , тот же, что и тип переданно­го функции аргумента, т.е. что Тэто тип выражения expr. В приведенном выше при­мере это так: х значение типа int и Т выводится как int. Но вывод не всегда работаеттаким образом.

Тип, выведенный для т, зависит не только от типа expr, но и от видаPa ramType. Существует три случая.---•ParamType представляет собой указатель или ссылку, но не универсальную ссылку.(Универсальные ссылки рассматриваются в разделе 5.2. Пока что все, что вам надознать, - что они существуют и не являются ни ссылками lvalue, ни ссылками rvalue.)•ParamType является универсальной ссылкой.•Pa ramType не является ни указателем, ни ссылкой.Следовательно, нам надо рассмотреть три сценария вывода.

Характеристики

Тип файла
PDF-файл
Размер
12,67 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6310
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее