Авторизация
Поиск по указателям
Дьюхэрст С.К. — Скользкие места C++ Как избежать проблем при проектировании и компиляции ваших программ
Обсудите книгу на научном форуме
Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter
Название: Скользкие места C++ Как избежать проблем при проектировании и компиляции ваших программ
Автор: Дьюхэрст С.К.
Аннотация: Вы держите в руках руководство по тому, как не допускать и исправлять 99% типичных, разрушительных и просто любопытных ошибок при проектировании и реализации программ на языке C++. Эту книгу можно рассматривать также, как взгляд посвященного на нетривиальные особенности и приемы программирования на C++.
Обсуждаются как наиболее распространенные "ляпы", имеющиеся почти в любой программе на C++, так и сложные ошибки в использовании синтаксиса, препроцессора, преобразований типов, инициализации, управления памятью и ресурсами, полиморфизма, а также при проектировании классов и иерархий. Все ошибки и их последствия обсуждаются в контексте. Подробно описываются способы разрешения указанных проблем.
Автор знакомит читателей с идиомами и паттернами проектирования, с помощью которых можно решать типовые задачи. Читатель также узнает много нового о плохо понимаемых возможностях C++, которые применяются в продвинутых программах и проектах.
В книге рассказывается, как миновать наиболее серьезные опасности, подстерегающие программиста на C++.
Издание предназначено для всех программистов, желающих научиться писать правильные и корректно работающие программы на языке С++.
Язык:
Рубрика: Computer science /
Статус предметного указателя: Готов указатель с номерами страниц
ed2k: ed2k stats
Год издания: 2006
Количество страниц: 262
Добавлена в каталог: 08.04.2009
Операции: Положить на полку |
Скопировать ссылку для форума | Скопировать ID
Предметный указатель
#define, и пространства имен 63
#define, определение литералов 63
#define, определение псевдофункций 65
#if, директива, выбор реализации класса 70
#if, директива, на практике 71
#if, директива, независимость от платформы 69
#if, директива, переносимость 69
#if, директива, применение для отладки 67
(оператор запятая) 47
&& (логический оператор) 47
-> (оператор стрелка) 61
<<< (сержантский оператор) 54
? (условный оператор) 47
Acyclic Visitor, паттерн 252
assert, макрос 72
auto_ptr, шаблон 38 166
Bridge, паттерн 32
Catch-обработчики, порядок 158
Command, паттерн 233
Composite, паттерн 233 235
const, квалификатор типа для ссылок 24
const, квалификатор типа перестановка 56
constcast, оператор 95 103 206 210
cv-квалификаторы cм. «const квалификатор «volatile квалификатор
Decorator, паттерн 179 233
delete [], оператор 145
delete [], оператор, область видимости и активация 151
delete [], оператор, подмена 149
dynamiccast, оператор для указателя на подобъект виртуального базового класса 125
dynamiccast, оператор и преобразования 105
dynamiccast, оператор, задание интимных вопросов о типе 247
dynamiccast, оператор, инициализация виртуального базового класса по умолчанию 129
dynamiccast, оператор, как предпочтительная альтернатива static_cast 85
dynamiccast, оператор, неоднозначность 105
dynamiccast, оператор, опрос возможностей 250
Factory Method, паттерн 192 228
for, предложение, ограничение области видимости переменной 51
for, предложение, сравнение с while 53
free и delete 145
lvalue, возврат из функции 24
lvalue, как результат вычисления условного оператора 27
lvalue, неизменяемое 26 64
lvalue, определение 26
lvalue, связывание ссылки с 24 102
malloc и new 145
Monostate, паттерн 173
NDEBUG, таинственные ошибки 67
Null Object, паттерн 234 235 243
operator delete 175
operator new, выделение памяти для скаляров 144
operator new, область видимости и активация 151
operator new, ошибки при выделении памяти 148
operator new, подмена 149
POD-классы (добрые старые данные) 121
Prototype, паттерн 188 192 234
Proxy, паттерн 242
reinterpretcast 75 93 129
set/get, интерфейсы 202
Singleton, паттерн 21 133 173
staticcast 95 231
Strategy, паттерн 241
switch, предложение 29
Template Method, паттерн 180
vector, сравнение с массивом 44 145 167
Visitor, паттерн 182 191 252
void * 74
volatile, квалификатор типа перестановка 56
volatile, квалификатор типа ссылки 24
vptr (указатель на vtbl) 193
vtbl (таблица виртуальных функций) 194
while, предложение, сравнение с for 53
Абстрагирование данных для типов исключений 153
Абстрагирование данных, цель 202
Автоинициализация 57
Агрегирование и использование 211
Адреса, арифметические ошибки 75 85 94 237
Адреса, возвращенного не-lvalue 222
Адреса, подобъектов базовых классов 175
Адреса, функций-членов см. «Указатели на
Акронимы 36
Акцессоры см. «Интерфейсы get/set»
Алгоритмы, переменная и постоянная часть 180
Анонимные временные объекты как объекты исключений 156
Анонимные временные объекты как результат инициализации копированием 134
Анонимные временные объекты как результат постфиксных ++ и – 221
Анонимные временные объекты, время жизни 101
Анонимные временные объекты, инициализация ссылки на const 102
Анонимные временные объекты, инициализация формального параметра-ссылки 98
Анонимные временные объекты, передача функциональных объектов по значению 113
Ассоциативность и приоритеты 48
Ассоциативность, проблемы 50
Базовый язык С++, логические операторы 27
Базовый язык С++, оператор взятия индекса 28
Базовый язык С++, предложение switch 29
Базовый язык С++, проваливание в switch 29
Базовый язык С++, условный оператор 28
Безымянное пространство имен 59
Брандмауэр 171
Взятия индекса оператор, встроенный 28
Видимость, сравнение с доступностью 30
Виртуальное присваивание 186
Виртуальные статические функции-члены 174
Виртуальные функции, вызов из конструкторов и деструкторов 184
Виртуальные функции, невиртуальный вызов 178
Виртуальные функции, перегрузка 181
Виртуальные функции, с аргументами по умолчанию 182
Виртуальные функции, чистые, вызов 179
Виртуальный конструктор, идиома cм. также «Prototype паттерн»
Внешние типы 59
Временные объекты 101
Временные объекты, преобразования 102
Выражение throw 155
Вырожденные иерархии 237
Вычислительные конструкторы 140
Глобальные переменные 20
Декремент, оператор 219
Дельта-арифметика, адреса объектов классов 92
Дельта-арифметика, корректировка значения this при вызове виртуальной функции 197
Дельта-арифметика, понижающее приведение 85
Дельта-арифметика, приведение неполных типов 94
Деструкторы, вызов виртуальных функций из 184
Динамическое связывание 169
Доминирование 198
Заголовочные файлы, счетчик Шварца 133
Захват ресурса как инициализация 38 162
Идиомы, auto_ptr 38
Идиомы, pimpl cм. «Паттерны Bridge»
Идиомы, виртуальный конструктор 188
Идиомы, захват ресурса как инициализация 162
Идиомы, интеллектуальный указатель 62 234
Идиомы, операции копирования 37
Идиомы, функциональный объект 234
Иерархии классов cм. «Проектирование иерархий»
Имена массивов и константные указатели 83
Индексирование, имени массива 28
Индексирование, указателей 28
Индексирование, целых указателями 28
Инициализаторы, путаница с объявлением массивов 43
Инициализация аргументов по умолчанию применение 21
Инициализация аргументов, прямая 136
Инициализация базового класса в конструкторе копирования 129
Инициализация виртуальных базовых классов 125
Инициализация и присваивание 112 122
Инициализация сравнение с перегрузкой 22
Инициализация ссылок 102
Инициализация статических данных во время выполнения, порядок 132
Инициализация статических членов в конструкторе 142
Инициализация формальных аргументов временными объектами 98
Инициализация, автоинициализация 57
Инициализация, область видимости переменных 115
Инициализация, операции копирования 117
Инициализация, оптимизация возвращаемого значения 138
Инициализация, паттерн Singleton 21
Инициализация, передача аргументов 113
Инициализация, побитовое копирование объектов классов 120
Инициализация, порядок членов в списке инициализации 124
Инициализация, прямая, сравнение с копированием 134
Инкремент, оператор 219
Интеллектуальный указатель, идиома 62 234
Интерфейсные классы 127 233 235
Интерфейсы get/set 202
Инфиксная нотация 60 215
История изменений 17
Квалификаторы типов const, перестановка 56
Квалификаторы типов volatile, перестановка 56
Квалификаторы типов ссылки 24
Квалификаторы, преобразование 80
Классы, POD (добрые старые данные) 121
Классы, интерфейсные 127
Классы, ограничение доступа 30
Классы, чисто виртуальный базовый класс 34
Ковариантные возвращаемые типы 192
Кодирование, краткость 16
Коды типов 169 241
Комментарии 16 (см. также «Сопровождение» «Удобочитаемость
Комментарии излишние 16
Комментарии о проваливании 29
Комментарии, самодокументированный код 16
Конкретные открытые базовые классы 236
Константное выражение 68
Константные данные-члены 205
Константные объекты и литералы 26
Константные указатели и имена объектов 84
Константные указатели и указатели на const 79
Константные указатели, определение 55
Константные указатели, преобразования, повышающие степень константности 79
Константные функции-члены, механизм работы 208
Константные функции-члены, отбрасывание const 210
Константные функции-члены, семантика 209
Константные функции-члены, синтаксис 207
Константы и литералы 20
Константы, присваивание 206
Конструкторы вычислительные 140
Конструкторы и преобразования 89
Конструкторы, вызов виртуальных функций из 184
Конструкторы, идиома виртуального конструктора 188
Конструкторы, инициализация и присваивание 122
Конструкторы, инициализация статических членов 142
Конструкторы, реализация с помощью шаблонных функций-членов 222
Контейнеры, содержащие указатели 213
Контравариантность 109
Космические иерархии 243
Лексический анализ 54
Литералы и константные объекты 26
Литералы и константы 19
Литералы, определение с помощью #define 63
Логические операторы 27 47
Локальные объекты, время жизни 160
Локальные объекты, затирание статических переменных 159
Локальные объекты, идиоматические трудности 160
Локальные объекты, исчезающие фреймы стека 158
Магические числа 18
Макросы, побочные эффекты 28 65
Максимальный кусок, определение 54
Максимальный кусок, примеры 39 54
Массивы и векторы 145
Массивы и синтаксис инициализатора 43
Массивы массивов 56 84
Массивы объектов класса 225
Массивы, освобождение памяти 145
Массивы, перестановка квалификаторов типа 56
Массивы, преобразование указателя на многомерный массив 83
Массивы, ссылки на 25
Мудрствование, излишнее 39
Наследование и проектирование иерархий 233 238
Наследование, ограничение доступа 34
Невиртуальный деструктор базового класса адреса подобъектов базовых классов 175
Невиртуальный деструктор и виртуальный статические функции-члены 174
Невиртуальный деструктор, исключения из правил 176
Невиртуальный деструктор, неопределенное поведение 173
Неполные типы для уменьшения числа зависимостей 31
Неполные типы, приведение 93
Неявные преобразования и ссылки 102
Неявные преобразования из производного класса в открытый базовый 110
Неявные преобразования при инициализации формальных аргументов 98
Неявные преобразования с помощью конструктора 89
Неявные преобразования, контравариантность 109
Неявные преобразования, неоднозначность результата 85
Нуль, нулевые ссылки 24
Нуль, нулевые указатели 35
Нуль, результат dynamiccast 107
Область видимости литералов, определенных с помощью #define 63
Область видимости локальная, проблемы 160
Область видимости переменных, ограничение 51
Обработка исключений 148 152 165
Объекты классов, побитовое копирование 120
Ограничение доступа и абстрагирование данных 202
Ограничение доступа и видимость 30
Ограничение доступа, наследование 34 230
Ограничение доступа, описание 30
Ограничение доступа, паттерн Bridge 32
Операторы в базовом языке С++ 27
Операторы взятия индекса, встроенные 28
Операторы логические 27
Операторы неоднозначные 86
Операторы порядок вычисления 45
Операторы преобразования альтернативы 89
Операторы преобразования и приведения 34
Операторы преобразования назначение 87
Операторы приведения типов 35
Операторы, (запятая) 47
Операторы, && (логический) 47
Операторы, -> (стрелка) 61
Операторы, <<< (сержантский) 54
Операторы, ? (условный) 47
Операторы, поиск операторной функции 59
Операторы, преобразования типов 35
Операторы, размещающие new 46
Операторы, || (логический) 47
Операции копирования, запрет 119
Операции копирования, идиома 37
Операции копирования, инициализация 117
Операции копирования, шаблонные 222
Опережающее объявление класса см. «Неполное объявление»
Опрос возможностей 249
Оптимизация возвращаемого значения 138
Оптимизация именованного возвращаемого значения 141
Освобождение выделенных из кучи объектов 166
Освобождение скаляров и массивов 144
Отбрасывание const 210
Открытое наследование 233
Отладка, директива #if 67
Отладка, недостижимый код 68
Параллельные иерархии 227
Паттерны, Acyclic Visitor 252
Паттерны, Bridge 32
Паттерны, Command 233
Паттерны, Composite 233 235
Паттерны, Decorator 179 233
Паттерны, Factory Method 192 228
Паттерны, Monostate 173
Паттерны, Null Object 234 235 243
Паттерны, Prototype 188 192 234
Паттерны, Proxy 242
Паттерны, Singleton 21 133 173
Паттерны, Strategy 241
Паттерны, Template Method 180
Паттерны, Visitor 182 191 252
Перегрузка и инициализация аргументов по умолчанию 22
Перегрузка оператора -> 61
Реклама