Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 39

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 39 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 392019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Например: оо!дои! от" кгоге () ( сегг « "неуспешное завершение оператора лет' 'нет свободной памятиччп", гйгот Ьад апас; !лета!п,') ( ве1 пеш Ьапд!ег(ои1 о) з1огей О задаем новый обробот тк /I но случай нехватки паяяпш 7ог(л) лешсЬаг(!0000), сои! « 'сделано',л"; Слово «сделано» никогда не будет выведено. Вместо этого, программа напьппет: неуспешное завершение оператора лет нет свободной памяти В () 14А.5 приведена приемлемая реализация орега1ог пеш [), которая проверяет пали ше обработчика н при его отсутствии генерирует исключение Ьас! и!!ос. Новый обработчик может выполнять и более осмысленные действия, чем просто завершение программы.

Если вы знаете, как работают пеш и с1е!е1е, например, если вы реализовали свои собственные орега1ог пеш () и орега1ог г!е!е1е (), обработчик может пол ытаться найти память для пеш. Другнмн словами, пользователь может реализовать сборгцпк мусора, делая таким образом явное использование с!е(е1е необязательным. Правда. такая задача определенно не для новичка. Большинству программистов, нуждаюшихся в автоматическом сборгцпке мусора, можно посоветовать воспользоваться уже написанным и оттестированным 1() В.9.1). Реализуя обработчик, мы осуществляем проверку наличия свободной памяти при каждом использовании пеш.

Существует два различных способа управления выделением памяти. Мы можем либо реализовать нестандартные функции выделения и освобождения памяти сз 15.6) для стандартного использования пеш, либо полагаться на дополнительную информацию о выделении памяти, предоставляемую пользователем 1з 10А.11, з!9А.5). 6.2.7. Явное преобразование типов Иногда нам приходится иметь дело с «сырой» памятью, то есть памятью, в которой хранятся плп будут храниться обьекты неизвестного компилятору типа. Например, функция выделения памяти может возвратить оо!с(*, указывающий на только что вы- Глава б.

Выражения и инструкции 172 лсленную память, илц мы хотим работать с целым зиачецием, как с адресом устрой- ства ввода/вывода: ио!О* та!!ос (к!ке 1); ио!ОД) ( ья" р = кгайв сакгчя!'л(та!!вв (!Од)); 0 пвл~ять выделена под 0целые Ю дев!се* О!= геел1егрге1 сак1<1О г(ев!се' (ОООО), // устпой ство по // пдпеву ОХ!00 Компилятор ие знает тип объекта, иа который указывает иоЫ'. Ои также ие знает, является ли ОХОРО корректным адресом. Следовательио, правильность преобразований полиостью иа совести программиста. Явное преобразование типа, часто называемое приведением типа, иногда очень важно. Однако, традиционно оио используется неоправданно часто и является основным источником ошиоок. Оператор к1а1!с сак! осуществляет преобразовапие ролствеипых типов, например указателя иа один тпп к указателю иа другой тип из той же иерархии классов, целый тпп в перечисление илп тип с плавающей точкой в интегральный.

Оператор ге!л1егрге! сиз!управляет преобразованиями между иесвязаниыми типами, например целых в указатели илп указателей в другие (иесвязаппые) указатели. Такое различие позволяет компилятору осугцествлять минимальную проверку типов при к1а1!с сак1, а программисту — легче обнаружить опасные преобразовапия, представляемые гега1егрге1 сак1. Некоторые преобразования к1а1!с сак1 являются переноспмымп.

но ге!а1ерге1 сак1 практически никогда вс переносимо. Хотя никаких гарантий относительно ге!п1егрге! сак1 )щть нельзя, в результате обычно получается значение нового типа. состояп1ее из той же цепочки битов, что и аргумент преобразования, Если результат содержит ие меньше бпт, чем исходпос значение, мы сможем преобразовать (с помощью ге!п1егрге! сак!) результат обратно в исходный тип и использовать получившееся зпачеиие.

То, что результатом преобразования ге!п1егр«е! сак! можио пользоваться, гарантировано только если тпп его результата есть в точиостп тип, использованный для определения задействованного в преобразовании значения, Если у вас возипкло искушеиие воспользоваться явным преобразованием, задумайтесь иад тем, так ли зто необходимо. В большинстве случаев в С+и иет нужды в явном преобразовании типов даже тогда, когда зто необходимо в С (й 1.6) и.ли в более ранних версиях Сеь (К 1.6.2, ~ Б.2,3). Во многих программах можно избежать явиого преобразования типов. В остальных — локализовать их в нескольких процедурах. В отой книге явное преобразование типов используется в реалистичных ситуациях только в з 6.2.7, ч 7.7, к 13.5, ~ 13.6, ~ 15А й' 17.6.2.3, 4 25А.1 и к Е3.1.

Также имеются преобразование г(упага!с сак1, выполняемое и проверяемое иа зтапе выполнения Я 15А.1), и соль! сак1 (й' 15А,2.1), которое аннулирует действие модификатора сопк! п ио!а1!!е, Сч 'ь уцас.чедовал от С форму записи (7)е, означающую любое преобразоваппе, которое может быть выражено комбииацией к!а!!с сак1, ге!а1егрге! сак1 и солк1 сак1, для получсиия значения типа Т из выражения е Я Б.2.3). Такой стиль иамиого опас- 17З 6.2. Обзор операторов нее, чем именованные операторы преобразования, потому что приведенную форму записи сложнее отслеживать в большой программе и вид преобразования, который имел в виду программист, не очевиден.

Ведь (7)е может осуществлять и переносимое преобразование между близкими типами, и непереносимое преобразование между несвязанными типами, и, наконец, аннулировать действие модификатора сопз! для указателя. Не зная конкретно типы Т и е, невозможно сказать, что именно делает (7)е. 6.2.8. Конструкторы Создание значения типа Тиз значения е можно выразить при помощи функциональ- ного обозначения Т(е), Например: иаЫТ(даиЫед) !и! ! = !п ! (с!), сатр!ех х = сатр!ех (д), 0- О атарисить дробную часть д О создать комплексное число из д ио!дТ(даиб!е с!) !п1!'= !и! (), сотр!ех х = сатр!ех (), П- 77 зна ~ение иа! па умолчанию 77 комплексное числа па ул~олчанию Результатом явного применения конструктора для встроенных типов является О, преобразованный в соответствующий тип Я 4.9.5).

Таким образом, !и! () является формой записи О. Для типа Т, определяемого пользователем, значение Т() определяется конструктором по умолчанию (еслн он имеетгя) (9 163.4, 9 17.4.1.2). Использование конструкторов для встроенных типов важно, в частности, при написании шаблонов, когда программист не знает, будет ли в качестве параметра шаблона указан встроенный тип или тип, определяемый пользователем. Конструкцию Т(е) иногда называют функциональным стилем приведения (типов).

К сожалению, для встроенного типа Тзапнсь Т(е) эквивалентна (Т) е Я 6.2.7). Соответственно, для многих встроенных типов использование Т(е) не безопасно. Для арифметических типов значения могут оказаться урезанными п даже явнос преобразование более длинных целых в более короткие типы (например, !опд в спас) может привести к непереносимому, зависящему от реализации поведению. Я пытаюсь использовать такую форму записи исключительно в случаях, когда конструирование значения хорошо определено, например для «сужающих» арифметических преобразований Я В.б), преобразований из целых в перечисления (ч 4.8) и для создания объектов типов, определяемых пользователем (ч 2.5.2, з 10.2.3). Преобразование указателей нельзя задавать прямо при помощи нотации Т (е).

Например, сааг*(2) является синтаксической ошибкой. К сожалению, соответствующую защиту против столь опасных преобразований можно обойти прп помощи !урес(еу (ч 4.9.7) для типов указателей, Форма записи Т () используется для создания значения по умолчанию типа Т. Например; 174 Глава б. Выражения и инструкции 6.3. Инструкции Ниже приведена сводка инструкций С++ и представлены некоторые примеры: Синтаксис инструкций' инструкиия: объявление ( последовательность инструкций„„) 1гу ( последовательность инструкций,, ) список обработчиков вьгражение„„; (г ( условие ) иноггрукция г)' (условие) инструкция еЬе инструкция вюгйсй ( уел овгге ) инструкция ийгте ( условие ) инструкция гго инструкция вйгте (выражение); уог (иницпализируюгцая инсгпрцкция условие«„„выролсенив«н) ггнсгггрукцилг саве константное выражение: инсгпрукцггя г(еХаи((: гигспгрукция бгеай; соп(гпие; гегигп вьгрожение його идвнтификапюр, идентификатор: инсгпрукция последовательность инструкций: инструкция последовательность ииструкций«, уел овце: г выроженгге спецификггтор пгггпа объявитель = выра, жение стгсок обрпботчиков: са~с)г ( объчвление исключения ) ( последовательность инструкции„„, ) список обраоотчггков список обработчиков,, Здесь чы означает «ориона!», то есть «необязательно», Обратите внимание, что объявление является инструкцией, а оператор присваивания и вызов функции инструкциями не являются; присваивание и вызов функции — это выражения, Инструкции для обработки исключений — блок ггу — описаны в ья 3.3.1, ' Здесь возникает следуюгпее затруднение, очень неприятное как для редаь гора (перевод гиков) книги, так, вероятно, и для читателей.

Используемый в ори пгв зле термин «ага гепгеггг» часто переводитсяся на русский язьгк как «операторы Мы все привыкли, что Гог гУ сазе и т.д. — это операторы, что неверно (по крайней мере в контексте С ь»). Термином «оператор» (орегагог) обозначается прпсваивание (=), сложение (+) и т.д. Операторы могут быть замегпспы в пользовательском классе. Больеаивсгво операторов имеет возвращаемое значение. В связи с тем, что понятия «орегагог, и ««гас«тель» в орнпгнале четко разделены, мы вынуждены сделать это и в переводе. Позгоыу для перевода «зъзгепгевг» мы выбрали отдельный термин — «инструкция», который также достаточно распространен в русскоязычной литературе.

Мы надеемся, что это не вызовет у читателей недоумения. Таким обрггзоы,уог, 1З сазе и т. д. — это инструкции, а не операторы. — Лрилгеч.ред 175 6.3. Инструкции 6.3.1. Объявления в качестве инструкций Объявление является инструкцией. Если только переменная не объявлена как в1аас, инициализатор выполняется каждый раз, когда поток управления достигает объявления (см. также у 10.4.8).

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

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

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

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