Главная » Просмотр файлов » Б. Страуструп - Дизайн и Эволюция C++. 2006

Б. Страуструп - Дизайн и Эволюция C++. 2006 (1160775), страница 103

Файл №1160775 Б. Страуструп - Дизайн и Эволюция C++. 2006 (Б. Страуструп - Дизайн и Эволюция C++. 2006) 103 страницаБ. Страуструп - Дизайн и Эволюция C++. 2006 (1160775) страница 1032019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Например, я считаю, что Глава 18. Препрецессер С Срр должен быть разрушен. Почти Катом Старший Среди средств, приемов и идей, которые С++ унаследовал от С, был и препроцессор Срр. Ориентация препроцессора на обработку файлов принципиально не согласуется с языком программирования, в основе которого лежат области действия, типы и интерфейсы.

Рассмотрим на первый взгляд безобидный фрагмент: 41пс1ине <втс)го.Ь> ехсегп оопЫе впгс(ооиЫе); нап1 () ( ртгпГГ("Квадратный корень из 2 равен Фд1п", всгс(2)); гг1пвЬ(всс)опт)) геспгп(0): ) Очевидно, что он печатает следующее: Квадратный корень из 2 равен 1.41421 Это кажется вполне разумным, но я откомпилировал строку таким образом: сс -Рвптт=ганс) -Ргетпгп=аЬотт после чего было напечатано Квадратный корень из 2 равен 7.82997е+28 аЬогг — соте оперно и программа завершилась с дампом памяти. Пожалуй, это чересчур необычный пример и вряд ли вы станете использовать флаги компилятора для определения макросов Срр, но суть дела от этого не меняется.

Макроопределения могут быть скрыты в среде разработки, в директивах компилятора и в заголовочных файлах. Макроподстановкн игнорируют границы областей действия и могут даже изменять структуру области действия, вставляя фигурные скобки, кавычки и т.д. Это позволяет программисту менять текст, видимый компилятору, не трогая ни единой строки кода. Конечно, иногда даже самые экстремальные способы использования Срр могут оказаться полезными, но его средства до такой степени не структурированы, что являются источниками постоянных трудностей для программистов, отвечающих за разработку, сопровождение ИИИИИИИЫ Препроцессор С а №1пс1иде копирует исходный текст из другого файла; о №йеб№пе определяет макрос (с аргументами или без); ш №1йс1ей включает последующие строки в зависимости от условия; о №ркадюа влияет на поведение компилятора способом, зависяшим от реализации.

Эти директивы применяются для решения различных задач программирования: №1пс1цбе о сделать доступным определение интерфейса; л составить исходный текст из различных частей. №беб№пе о опрсделитгс — символические константы; открытые подпрограммы; — обобщенные подпрограммы; — обобщенные типы; о псреимсноват№х л связать строки; а определить специализированный синтаксис; гд сделать обшую макрообработку. №1Ые1 гл осуществить контроль версий; о произвести комментирование кода. №ргадюа о осушествить управление размешением структур данных в памяти; о информировать компилятор о необычном потоке управления.

Все эти задачи решаются с помощью Срр довольно неудачно, с использованием непрямых методов, но тем не менее эффективно, и зачастую для практических ' Директивы №1 г, № 11 не и № оное№ тоже важны, но в контексте данного обсуждения значения не имеют. и перенос кода на другие платформы, а также для авторов инструментальных средств.

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

Срр, возможно, и неудачен, но трудно найти ему лучше структурированную и более эффективную замену. У препроцессора С есть четыре основных директивы '. Препроцессор С ~1ИИИИИИИ целей такой работы достаточно. Важнее то, что Срр имеется везде, где есть С. Это хорошо известно и часто оказывается полезнее, чем применение гораздо лучшего, но менее распространенного макропроцессора. Данный аспект важен еще и потому, что препроцессор С часто используется для решения задач, не имеющих ничего общего с языком С.

В С++ имеются альтернативы для большинства основных применений директивы №с1е№1пе: гз модификатор сопэс для определения констант (см. раздел 3.8); о модификатор 1п11пе для открытых подпрограмм (см. раздел 2.4.1); о шаблоны для функций, параметризованных типами (см. раздел 15.6); о шаблоны для параметризованных типов (см. раздел 15.3); га пространства имен для обобщения именования (см. главу 17). Альтернативы директиве №(пс1цс1е в С++ нет, хотя пространства имен предоставляют механизм областей действия, который поддерживает композицию таким образом, что поведение №1пс1иПе становится более структурированным. Я предлагал добавить директиву 1пс1ис)е в сам язык С++ в качестве замены одноименной директиве Срр.

Директива 1пс1цс1е отличалась бы от препроцессорной следующим: о если файл включен дважды, то второй 1пс1цс1е игнорируется. Это устраняет часто встречающуюся проблему, которая сейчас решается искусственно и неэффективно с помощью директив №с1е1йпе и №1 Ыег; о макрос, определенный вне включенного с помощью 1пс1ис)е текста, не расширяется внутри этого текста, что обеспечивает защиту информации от случайного воздействия макросов; о макрос, определенный внутри включенного с помощью 1пс1цс1е текста, не расширяется в тексте, который обрабатывается после включенного. Тем самым гарантируется, что макросы во включенном тексте не вводят зависимость от порядка в ту единицу трансляции, которая включает файл.

Также это защищает от сюрпризов, которые могут преподнести макросы. Такой механизм был бы очень полезен в системах, где осуществляется предварительная компиляция заголовочных файлов, да и вообще для тех программистов, которые составляют программы из независимо разработанных частей. Хочу, впрочем, отметить, что это только идея, а не одобренное средство. Остаются директивы №1 йс)ей и №ргаспла. Без последней можно вполне обойтись, поскольку я ни разу еще не встречал понравившейся мне прагмы. Слишком часто № ргаспла используется для того, чтобы украдкой подменить семантику языка и внедрить чрезмерно специализированные расширения, к тому же с нелепым синтаксисом.

Для директивы №1 Ес1ей у нас пока нет подходящей замены. В частности, использование предложений 11 и константных выражений — это неполное решение. Например: КИИИИИИВ т1 )с) ) // ) Препроцессор С Этот прием не годится для управления объявлениями, а предложение х й должно быть синтаксически корректным даже в том случае, если некоторая его ветвь никогда не будет исполняться. Мне бы хотелось застать время, когда Срр не будет использоваться. Однако единственный реальный и ответственный путь для достижения атой цели — сначала сделать Срр ненужным, потом убедить людей пользоваться более удачной альтернативой и только после этого — через много-много лет — отправить Срр в среды разработки, где ему и место наряду с остальными внеязыковыми средствами.

Алфавмтный указатель Абстрактные класс 267, 284 и библиотеки 191 ишаблоны 385 тип 286 Автоматические инстанцирование шаблона 369 память 41 Автопрототипирование 50 Аппаратура, специализированная 144 Аргументы именованные 164 ограничения на аргументы шаблонов 348 ослабление правил 301 по умолчанию 68 правиласоответствия 235 проверка во время выполнения 302 шаблонов выведение 354 зависимость 375 не являющиесятипами 347 функций 355 Асинхронныесобытия 398 Ассемблер 133 Ассоциативныймассив 328 стандартный 202 Базовая библиотека 199 Базовый класс 58 виртуальный 265 Размещение в памяти 272 доступ 307 и производный 84 инициализация 282 приведение из виртуального базового класса 318 кзакрытомубазовому классу 335 сокрытиечленов 421 Базы данных 200 Безопасность 138 и исключения 389 и совместимость 340 Безопасные преобразование 234 приведение типов 315 Библиотеки 191 согпр!ех 76 базовые 199 в стиле Бгпа!Иазт 191 для поддержки многозадачности 192.

198 параллельности 196 устойчивости объектов 200 для численных расчетов 200 и ЯТТ1 190 и языковые средства 189 инициализация 107 компонентов Буча 199 поставщики и пространстваимен 407 потокового ввода/вывода 193 проектирование 190 и шаблоны 383 специализированные 200 стандартные 201 стандартных компонентов 192 языковая поддержка 190 Блокировка 198 Булез тип Ьоо1 261 Буч библиотека компонентов 199 компоненты 363, 385 в Ввод/вывод 193 в языке С 107 объектов 327 символов из расширенных наборов 172 Вектор стандартный 202 шаблон 347 ИИИИИИИЕ Дизайн и эволюция С++ Версии С++ 80 Видимость и доступ 64 Виртуальные функции 82 вызов в конструкторах 288 деструктор 223 имножественное наследование 271 ишаблоны 347 копирование 248 оптимизация 246 вызова 128 память 109 перекомпиляции 86 реализация 86 зффективность 58, 86 Вложенные класс 113, 140 локальность 130 функция 162 Возведение в степень 254 Возвращаемое значение в виде ссылки 98 оператором петт() 225 оптимизация 308 тип 300 Возобновление 394 Временные объекты 153 Время выполнения инициализация 107, 292, 332 информация о типе 312 и библиотеки 191 гюддержка в Сыйя С)аваев 58 зффективность 41, 330 Вспомогательный класс 98 Встроенные системы 210 типы 385 Выбор языка программирования 184 Выведение аргументов шаблона 354 Вызовы виртуальной функции в конструкторе 288 необъявленной функции 50 нотация вызоваконструктора 342 по значению 97 по ссылке 97 соглашения 145, 243 Глобальные имя 294 статическое устаревшее 424 областьдействия 416 переменная 41 Группировкаисключений 390, 400 Двоичный литерал 162 Двойнаядиспетчеризация 306 с помощью шаблонов 368 Декремент.оператор — 252 Делегирование имножественное наследование 277 иоператор -> 249 Деструкторы 105 Се)е!е() 66 виртуальный 223 для встроенного типа 385 и бе)е1е 220 и исключения 393 и сборка мусора 229 явный вызов 224 Диалекты 111, 141 Диграфы 171 Динамические инициализация 108, 292 контроль исключений 400 память 41 связывание 2!4 Директива инстанцирования шаблона 371 Доступ и видимость БЗ кбазовому классу 308 контроль 40, 307 в конструкторах 105 н статическиечлены 295 имен 63 предоставление 63 Дружественныефункции и инкапсуляция 63 и члены 92 Единицы защиты 64 трансляции 67 Завершение 394 Зависимость от аргумента шаблона 375 от библиотек 145 от реализации 144 Заголовочный файл 43, 214, 242 предварительно откомпилированный 429 Закрытое наследование реализации 62 Закрытый базовый класс 307 Алфавитный указатель ПИИИИШИП Запрет копирования 244 наследования 245 Размещения 244 Затраты во время выполнения 240 множественного наследования 276 Защита в Зпш!йа!К 307 класс как единица 64 модель 62 модель С++ 33 Защищенный член 307 И Идентификатор типа 322 Идентификация типа 85, 312 Иерархия классов 30 Именованныеаргументы 164 Имя аргумента 166 глобальное 294 кодирование типа 241 контроль доступа 64 конфликт и глобальная область действия 404 имножественное наследование 280 правила привязки 373 префиксы 405 пространства имен 412 РазРешение 149 вшаблонах 375 сокрытие 87 схема кодирования 145 эквивалентность 45 Инициализатор =0 285 Инициализация 47 с!п 107 соц1 107 и!С!и 107 в!Соц! 107 библиотек 107 динамическая 108, 292 и виртуальная память 109 и выделение памяти 219 и присваивание 33 константного члена 162 контролируемая 332 порядок 107, 282 синтаксис 385 статическая 106, 292 Инкапсуляция и дружественные функции 63 Инкремент, оператор++ 252 Инстанцирование 370 позднее 351 Инструментальные средства С++ 75 для проектирования языка 114 иСРР 428 критерии 32 семантически-ориентированные 214 символьно-ориентированные 214 синтаксически-ориентированные 214 специализированные 212 Интегрированная система 123 Интерфейс 40 и приведение типов 191 и реализация 287 и реалиэациядля шаблонов 384 использование сопв1 101 отдельный 44 открытое наследование 63 с другим языком 243 составление 413 Исключения гарантии перехвата 388 группировка 390, 400 динамическая проверка 400 затРаты 388 иС 389 и библиотеки 191 и большие системы 396 и деструкторы 393 и иерархия классов 391 и конструкторы 391 и нехватка памяти 394 и переполнение 398 и повторная компиляция 400 и размещение объекта в памяти 401 и старый код 398 и управление ресурсами 391 и уровни абстракции 397 и шаблоны 385 и эффективность 401 обработка 119, 387 распространение нанесколькоуровней 399 синтаксис 389 спецификация 400 статическая проверка 399 Использование 328 бупапнс сав1 303, 327 ЯТП 317, 319 множественногонаследования 278, 328 новых приведений типов 342 пространств имен 408, 411 шаблонов 329 ИЕИИИИИИВ Дизайн и эволюция С+ Квалификация 105 явная 410 Класс абстрактный 267, 284 базовый 58 и производный 84 в языке 6!пш1а 32, 53 виртуальный базовый 266 вложенный 140, 295 опережающее объявление 296 вспомогательный 98 доступ к базовому 307 зависимость от порядка объявления членов 149 и з1гцс1 86 и пространство имен 422 иерархия 30 иерархия и перегрузка 233 как единица защиты 64 как определенный пользователем тип 39 контейнерный 343 концепция 40 корневой 267 модель размещения в памяти 61 опережающая ссылка на член 151 производный 58, 307 универсальный корневой 191 член 295 шаблон 346, 365 шаблон и абстрактный 385 Ключевое слово апб 171 апб ец 171 Ьйапб 171 ойог 171 согпр1 171 1пв1апйа1е 371 по1 171 по1 ец 171 ог 171 ог ец 171 розбех 252 ргейх 252 эрес!а6эе 380 1егпр1а1е 346 хог 171 хог ец 171 Код генерация 308 дублирование 351 Кодирование низкоуровневое 343 типа 241 Комбинирование методов 274 Комментарий // 53, 104 Компилятор 177 встраивание функций 42 неполного цикла С1гопт 76 предупреждения 51, 342 Компиляция однопроходная 151 раздельная 32, 43 Композиция шаблонов 361 Компоновка (связывание) вС 239 затраты 240 и перегрузка 239 и Указатели на функции 243 модель 43 опытреализации 241 программ на С и С.н 239 производительность и шаблоны 370 с программами на Гогтгвп, Разсаб Р~/1 243 на других языках 43 типобезопасная 44, 239 синтаксис 403 Конструктор 104 вызов виртуальной функции 288 для встроенноготипа 385 и библиотеки 191 и исключения 393 и оператор петт 219 и распределение памяти 68 и шаблоны 385 контроль доступа 105 копирующий 247 нотациядля вызова 342 по умолчанию 68, 386 Контейнеры 202 Контекст 374 Контроль 401 доступа 40, 307 исключений 400 множественного наследования 269 нехватки памяти 225 ошибок в шаблонах 374 Конференции 175 Копирование виртуальная функция 248 глубокое 248 конструктор 247 контроль допустимости 244 объекта 299 побитовое 246 поверхностное 247 Алфавитный указатель почленное 246 указателя 247 Корневойкласс 192, 267 Критерии разработки шаблонов 344 расширения С++ 159 Куча 41 Л Литерал двоичный 162 типа сваг 232 Локальность 129 вложенных классов 130 Локальные переменные 40 поумолчанию 1!2 статические массивы в АНЗ! С 140 Макросы СРР 130, 427 вместо обобщенных типов 61 для имитации шаблонов 345 и контейнерные классы 343 Массив ассоциативный 202, 328 локальный статический в АМЗ! С 140 освобождение памяти 224 РаспРеделение памяти 220 шаблон 347 Менеджер ресурсов 222 Метаобъекг 330 Метод без ограничений 332 комбинирование 274 Многопоточность 196 Многопроцессорные системы 196 Многоточие 340 Множественноенаследование 119, 263, 265 в С++ 276 и Зятю)а 264 и библиОтеки ! 91, 264 и виртуальные функции 271 и делегирование 277 и конфликт имен 280 и неоднозначность 284 и обработка исключений 391 и размещение объекта в памяти 270 и сборка мусора 277 издержки 276 использование 278, 328 статический контроль 269 1! ИИИИИИП Модульность 113 Мультиметод 303, 331 Н Набор команд 145 Наде;кность и обработка исключений 387 Наследование бе!е!е() 220 петт() 220 запрет 245 иперегрузка 232 и шаблоны 365 интерфейса 62 множественное 119 ограничения эа счет 349 от встроенного типа 385 реализации 62 Неоднозначность 234 вшаблонах 376 ыножественного наследования 264 управление 233 Неявные !и! 55 инстанцирования шаблонов 355 преобразования 90, 230 приведениятипов 355 сужающие преобразования 340 Низкоуровневое кодирование 343 программирование 133, 209 средствавСМФС!аваев 38 Нотация .их 106 вызова конструктора 342 конструктора 104 объявлений, линейная 55 приведения типов ЗЗЗ, 310 Нулевойуказатель 236 О Область действия глобальная 417 иСРР 427 конфликты имен 404 Объединение иерархий классов 280 Объект в стеке 103 ввод/вывод 282 копирование 299 представление 40, 286 размещение в памяти 310 статический 103 частичносконструированный 393 ИИИИИИИИ Дизайн и эволюция С++ Объектно-ориентированные базаданных 200 программирование 84, 182 иСчь 205 изучение 180 проектирование 125, 182 Объявление доступа 63 и цэ!п9-объявление 424 Объявления очег1оаб 238 в А19о 168 ! 09 в условиях 110 в циклах!ог 110 вложенного класса, опережающие 296 линейная нотация 55 реализация 44 синтаксис в С 54 специализация 379 Ограничения 348 Ограниченные указатели !68 Однопроходныйсинтаксическийанализатор 149 Операторы , 254 †,декремента 252 —, префиксный и постфиксный 252 *', возведение в степень 254 *", возведение в степень 256 ++, инкремента 252 ++, префиксный и постфиксный 252 -> 248 ->* 254 .

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

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

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

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