Авторизация
Поиск по указателям
Дьюхэрст С.К. — Скользкие места C++ Как избежать проблем при проектировании и компиляции ваших программ
Обсудите книгу на научном форуме
Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter
Название: Скользкие места C++ Как избежать проблем при проектировании и компиляции ваших программ
Автор: Дьюхэрст С.К.
Аннотация: Вы держите в руках руководство по тому, как не допускать и исправлять 99% типичных, разрушительных и просто любопытных ошибок при проектировании и реализации программ на языке C++. Эту книгу можно рассматривать также, как взгляд посвященного на нетривиальные особенности и приемы программирования на C++.
Обсуждаются как наиболее распространенные "ляпы", имеющиеся почти в любой программе на C++, так и сложные ошибки в использовании синтаксиса, препроцессора, преобразований типов, инициализации, управления памятью и ресурсами, полиморфизма, а также при проектировании классов и иерархий. Все ошибки и их последствия обсуждаются в контексте. Подробно описываются способы разрешения указанных проблем.
Автор знакомит читателей с идиомами и паттернами проектирования, с помощью которых можно решать типовые задачи. Читатель также узнает много нового о плохо понимаемых возможностях C++, которые применяются в продвинутых программах и проектах.
В книге рассказывается, как миновать наиболее серьезные опасности, подстерегающие программиста на C++.
Издание предназначено для всех программистов, желающих научиться писать правильные и корректно работающие программы на языке С++.
Язык:
Рубрика: Computer science /
Статус предметного указателя: Готов указатель с номерами страниц
ed2k: ed2k stats
Год издания: 2006
Количество страниц: 262
Добавлена в каталог: 08.04.2009
Операции: Положить на полку |
Скопировать ссылку для форума | Скопировать ID
Предметный указатель
Перегрузка оператора взятия индекса 28
Перегрузка операторов 215
Перегрузка операторов инкремента и декремента 219
Перегрузка поиск операторной функции 59
Перегрузка порядок вычисления 48
Перегрузка сравнение с переопределением и сокрытием 188
Перегрузка, виртуальных функций 181
Перегрузка, инфиксная нотация 60
Передача аргументов 113
Перекомпиляция, как избежать 32 235
Переменные, кодирование типа в имени 34
Переменные, ограничение области видимости 51
Переносимость, директива #if 69
Переносимость, нулевые указатели 35
Переопределение невидимых функций 191
Переопределение, механизм 193
Переопределение, определение 195
Переопределение, сравнение с перегрузкой и сокрытием 188
Перехват исключений 156
Перехват строковых литералов 153
Переходник (thunk) 197
Перечисляемые константы и литералы, определенные с помощью #define 64
Перечисляемые константы, инициализация статических членов 142
Перечисляемые константы, магические числа 19
Перечисляемые константы, точка объявления 58
Платформенная независимость, литералы и константы 19
Платформенная независимость, преобразования 74
Повторное использование глобальных переменных 20
Повторное использование кода 258 233
Повторное использование, прозрачный ящик см. «Наследование»
Подвыражения, порядок вычисления 45
Подобъект базового класса, адрес 175
Подобъект базового класса, инициализация 125 129 185
Подстановка контейнеров 227
Подсчет ссылок 215
Полиморфизм, алгоритм с переменной и постоянной частью 180
Полиморфизм, брандмауэр 171
Полиморфизм, ветвление по коду типа 170
Полиморфизм, виртуальные функции, вызов из конструкторов и деструкторов 184
Полиморфизм, виртуальный конструктор копирования 188
Полиморфизм, гибкость шаблонных методов 180
Полиморфизм, динамическое связывание 169
Полиморфизм, доминирование 198
Полиморфизм, кодирование типов 169
Полиморфизм, невиртуальный вызов 178
Полиморфизм, перегрузка 181
Полиморфизм, с аргументами по умолчанию 182
Полиморфизм, связи между компонентами 171
Полиморфизм, сокрытие невиртуальных функций 177
Полиморфизм, сокрытие, виртуальной присваивание 186
Полиморфизм, сокрытие, виртуальные статические функции-члены 174
Полиморфизм, сокрытие, виртуальных функций 181
Полиморфизм, сокрытие, исключения из правил 176
Полиморфизм, сокрытие, невиртуальный деструктор базового класса адреса подобъектов базовых классов 175
Полиморфизм, сокрытие, неопределенное поведение 173
Полиморфизм, сокрытие, перегрузка 188
Понижающее приведение 85
Поперечное приведение 250
Порядок вычислений см. «Приоритеты»
Преобразование для опроса возможностей 250
Преобразование для приведения к указателю на виртуальный базовый класс 129
Преобразование как предпочтительная альтернатива staticcast 85 125
Преобразование на неполные типы 93
Преобразование на указатели на производный класс 83
Преобразование на члены класса 110
Преобразование неявное, для инициализации формальных аргументов 98
Преобразование неявное, из производного класса в открытый базовый 110
Преобразование неявное, контравариантность 109
Преобразование неявное, неоднозначность 85
Преобразование неявное, с помощью конструкторов 89
Преобразование посредством void * 74
Преобразование указателей 80
Преобразование указателя на многомерный массив 83
Преобразование, reinterpretcast 75 94
Преобразование, временные объекты 101
Преобразование, время жизни временных объектов 101
Преобразование, дельта-арифметика для адресов объектов классов 92
Преобразование, зависимость от платформы 74
Преобразование, имени массива в указатель 83
Преобразование, инициализация ссылок 102
Преобразование, использование функций вместо 86
Преобразование, квалификаторов 80
Преобразование, константные указатели и имена массивов 84
Преобразование, контравариантность 109
Преобразование, корректировка значения this при вызове виртуальной функции 197
Преобразование, неоднозначность 107
Преобразование, оператор constcast 95 103 206 210
Преобразование, оператор dynamic_cast для задания интимных вопросов о типе 247
Преобразование, передача по значению 100
Преобразование, передача по ссылке 100
Преобразование, повышающие степень константности 79
Преобразование, понижающие приведения 85
Преобразование, приведение неполных типов 94
Преобразование, срезка объектов производного класса 77
Преобразование, статические приведения 95
Преобразование, формальные аргументы инициализация временными объектами 98
Преобразование, формальных аргументов 98
Препроцессор NDEBUG, таинственные ошибки 67
Препроцессор, выбор реализации класса с помощью #if 70
Препроцессор, константные выражения 68
Препроцессор, макрос assert 71
Препроцессор, область видимости литералов 63
Препроцессор, определение литералов с помощью #define 63
Препроцессор, отладка 67
Препроцессор, отладочные версии 67
Препроцессор, псевдофункции 65
Препроцессор, утверждения, побочные эффекты 71
Приведение см. также «void *»
Приведение в случае множественного наследования 92
Приведение в старом стиле 94 231
Приведение нединамическое см. «Статические приведения»
Приведение неполных типов 93
Приведение статическое 95
Приведение указателя на базовый класс к указателю на производный класс см. «Понижающее приведение»
Приведение, reinterpret_cast 75 93
Приведение, проблемы в ходе сопровождения 81 95 96
Приоритеты операторов 217
Приоритеты операторов и ассоциативность 48 50
Приоритеты операторов, (оператор запятая) 47
Приоритеты операторов, && (логический оператор) 47
Приоритеты операторов, ? (условный оператор) 47
Приоритеты операторов, обзор 44
Приоритеты операторов, оператор взятия индекса 28
Приоритеты операторов, оператор указания 50
Приоритеты операторов, перегрузка операторов 48
Приоритеты операторов, размещающий оператор new 46
Приоритеты операторов, уровни приоритетов 49
Приоритеты операторов, фиксированный порядок вычислений 47
Приоритеты операторов, || (логический оператор) 47
Присваивание и инициализация 112 122
Присоединяемые классы 233
Проваливание 29
Проектирование иерархий, арифметические ошибки при вычислении адреса 237
Проектирование иерархий, ветвление по кодам типов 241
Проектирование иерархий, вырожденные иерархии 237
Проектирование иерархий, запросы о типе во время выполнения 246
Проектирование иерархий, защищенный доступ 230
Проектирование иерархий, интерфейсные классы 233
Проектирование иерархий, классы-протоколы 233
Проектирование иерархий, конкретные открытые базовые классы 236
Проектирование иерархий, космические иерархии 243
Проектирование иерархий, массивы объектов класса 225
Проектирование иерархий, наследование 238
Проектирование иерархий, опрос возможностей 249
Проектирование иерархий, открытое наследование 233
Проектирование иерархий, повторное использование кода 233
Проектирование иерархий, подстановка контейнеров 227
Проектирование иерархий, семантика значения 237
Проектирование иерархий, срезка 237
Проектирование иерархий, управление на основе типов 241
Проектирование классов, агрегирование и использование 211
Проектирование классов, интерфейсы get/set 202
Проектирование классов, константные данные-члены 205
Проектирование классов, константные функции-члены, механизм работы 208
Проектирование классов, оператор декремента 219
Проектирование классов, оператор инкремента 219
Проектирование классов, операторы-члены и друзья класса 218
Проектирование классов, отбрасывание const 210
Проектирование классов, перегрузка операторов 215
Проектирование классов, приоритеты операторов 217
Проектирование классов, семантика 209
Проектирование классов, синтаксис 207
Проектирование классов, ссылочные данные-члены 205
Проектирование классов, шаблонные операции копирования 222
Пространство имен безымянное 59
Пространство имен и #define 63
Прямая инициализация аргументов 136
Псевдонимы и отношение агрегирования / использования 211
Псевдонимы, ссылки как 24 102
Псевдофункции, определение 65
Размещающий оператор new, вызов конструктора 113 122 136
Размещающий оператор new, подмена глобальных new и delete 149
Размещающий оператор new, порядок вычисления аргументов 46
Реализация класса, выбор с помощью #if 70
Связи между компонентами, глобальные переменные 20
Связи между компонентами, обход защиты доступа 232
Связи между компонентами, полиморфизм 171
Связывание динамическое 169
Связывание, ссылки с lvalue 24 102
Связывание, ссылки с функцией 25
Семантика значения 237
Сержантский оператор 54
Синтаксис и ассоциативность 48 50
Синтаксис оператора -> 61
Синтаксис операторов 59
Синтаксис подвыражений 45
Синтаксис, const, квалификатор типа, перестановка 56
Синтаксис, volatile, квалификатор типа, перестановка 56
Синтаксис, ассоциативность и предшествование 48
Синтаксис, внешние типы 59
Синтаксис, выделение лексем 54
Синтаксис, инициализаторы, не путать с массивами 43
Синтаксис, инфиксная нотация 60
Синтаксис, конкретизация шаблонов 54
Синтаксис, константные указатели 55
Синтаксис, константные функции-члены 207
Синтаксис, лексический анализ 54
Синтаксис, максимальный кусок 54
Синтаксис, массивы, не путать с инициализаторами 43
Синтаксис, обзор 44
Синтаксис, ограничение области видимости переменных 51
Синтаксис, оператор указания 50
Синтаксис, перегрузка операторов 48
Синтаксис, перегрузка, инфиксная нотация 60
Синтаксис, перестановка квалификаторов типа 56
Синтаксис, перестановка квалификаторов типов 56
Синтаксис, поиск операторной функции 59
Синтаксис, порядок вычислений фиксированный 47
Синтаксис, порядок вычислений, (оператор запятая) 47
Синтаксис, порядок вычислений, && (логический оператор) 47
Синтаксис, порядок вычислений, ? (условный оператор) 47
Синтаксис, порядок вычислений, || (логический оператор) 47
Синтаксис, предложение for, ограничение области видимости переменной 51
Синтаксис, предложение for, сравнение с while 53
Синтаксис, предшествование, автоинициализация 57
Синтаксис, проблемы 50
Синтаксис, размещающий оператор new 46
Синтаксис, спецификатор компоновки 59
Синтаксис, спецификаторы в объявлениях, порядок следования 55
Синтаксис, статические типы 59
Синтаксис, уровни приоритетов 49
Синтаксис, функция или объект 56
Соглашения об именовании, кодирование типа переменной в ее имени 34
Соглашения об именовании, мнемонические имена 18
Соглашения об именовании, ограничение доступа 34
Соглашения об именовании, описание отношений владения 212
Соглашения об именовании, простота 34
Соглашения об именовании, самодокументированный код 18
Сокрытие данных см. «Ограничение доступа»
Сокрытие невиртуальных функций 177
Сокрытие, сравнение с перегрузкой и переопределением 188
Сопровождение 75 81 95 96 «Удобочитаемость
Сопровождение, владение в контейнерах 213
Сопровождение, выделение памяти для скаляров и массивов 146
Сопровождение, идиомы 37
Сопровождение, инициализация статических членов 143
Сопровождение, коды типов 171
Сопровождение, мнемонические имена 18
Сопровождение, неполные объявления 31
Сопровождение, порядок квалификаторов в объявлениях 56
Сопровождение, предложение for 51 53
Сопровождение, приоритеты операторов 49
Сопровождение, проваливание 29
Сопровождение, соглашения об именовании 17
Сопровождение, способы облегчить взаимозаменяемые контейнеры 228
Сопровождение, стандарты кодирования 41 47
Сопровождение, управление на основе типов 242
Сопровождение, утверждения 72
Спецификаторы объявлений порядок следования 55
Список инициализации членов, порядок следования 124
Срезка и проектирование иерархий 237
Срезка объектов производных классов 77
Ссылки и указатели 23
Ссылки как псевдонимы 24 102
Ссылки на локальные переменные 158
Ссылки на массивы 25
Ссылки на неполные типы 93
Ссылки нулевые 24
Ссылки, возврат из функции 24
Ссылки, инициализация 102
Ссылки, квалификаторы const и volatile 24
Ссылки, приведение типа 25
Ссылки, привязка к функции 25
Статические переменные, инициализация во время выполнения 132
Статические типы 59
Строковые литералы, как объекты исключений 152
Счетчик Шварца 133
Темные закоулки языка С++, адрес возвращенного не-lvalue 222
Темные закоулки языка С++, вызов чисто виртуальной функции 179
Темные закоулки языка С++, гарантии относительно reinterpretcast 93
Темные закоулки языка С++, генерируемый компилятором оператор присваивания подобъектам виртуального базового класса 127
Темные закоулки языка С++, индексирование целого 28
Темные закоулки языка С++, индексирование целого, копирование строкового литерала во временный объект при употреблении в выражении throw 155
Темные закоулки языка С++, индексирование целого, применение квалификатора к typedef у функции 57
Темные закоулки языка С++, индексирование целого, результат условного оператора — lvalue 27
Темные закоулки языка С++, индексирование целого, структура предложения switch 29
Темные закоулки языка С++, индексирование целого, точка объявления перечисляемой константы 58
Темные закоулки языка С++, неприменимость квалификаторов к ссылкам 24
Темные закоулки языка С++, область видимости при вызове функции-члена operator delete 175
Темные закоулки языка С++, переопределение невидимых функций 191
Типы исключений 153
Удобочитаемость 39 (см. «Комментарии» «Сопровождение
Указатели и ссылки 23
Указатели на локальные переменные 158
Указатели на неполные типы 93
Указатели на указатель на производный класс 83
Указатели на функции 25
Указатели на члены класса 23 109
Указатели, владение 213
Указатели, возбуждение исключений 155
Указатели, контейнеры, содержащие указатели 213
Указатели, преобразование 80
Указатели, приоритеты операторов 50
Улыбка Чеширского кота см. «Bridge паттерн»
Управление памятью и ресурсами для скаляров и массивов 144
Управление памятью и ресурсами, auto_ptr 166
Управление памятью и ресурсами, возбуждение исключений в виде указателей 156
Управление памятью и ресурсами, временные объекты в качестве объектов исключений 156
Управление памятью и ресурсами, захват ресурса есть инициализация 162
Управление памятью и ресурсами, исправление ошибки путем добавления static 161
Реклама