<< Пред. стр. 118 (из 121) След. >>
взятия индекса ([]), 736вопросы проектирования, 728–30
вызова функции (()), 736–38
вызова функции для объектов-функций, 567
декремента (--), 740–44
доступа к членам (->), 738–40
имена, 727–28
инкремента (++), 740–44
объявленные как друзья, 730–33
присваивания (=), 733–35
с параметрами-ссылками, преимущества, 335
члены и не-члены класса, 723–27
определения, 15
typedef, 126
базового класса, 871–75
иерархии классов, 862–69
исключений, как иерархий классов, 1013–14
класса, 594–601
сравнение с определением класса, 600–601
класса-диспетчера запросов (пример), 934–39
массива, 113
многомерных массивов, 116
множеств, 304–6
недопустимость размещения в заголовочном файле, 385
объекта, 382
объектов класса bitset, 169
объектов класса complex, 125
последовательных контейнеров, 256–61
производного класса, 876–78
пространств имен, 406–20
членов, 415–17
сравнение с объявлениями, 381–83
функции
и локальная область видимости, 378
как часть шаблона функции, 477
шаблона класса, 791–800
разрешение имен в, 844–46
опции
в командной строке, 356–65
отображения, 292–309
map, заголовочный файл, 293
заполнение, 293
невозможность переупорядочения, 587
недопустимость использования итераторов с произвольным доступом, 583
сравнение с множествами, 292
текста
заполнение, 292–98
определение, 292–98
отрицатели
как адапторы функций, 573
очереди, 315–16
queue, заголовочный файл, 315
size(), 315
top(), функция, 316
очереди с приоритетами, 315, 316
очередь с приоритетами, 315
size(), 315
top(), функция, 316
ошибки
assert(), макрос, 226
бесконечная рекурсия, 351
в инструкции if, 193
в циклах, 197
зацикливание, 93
висячие указатели, 389
как избежать, 394
динамического выделения памяти, 395
итератор, использование, 226
компиляции, конфликты в области видимости using-объявления, 437
массив
индекс за концом, 94
области видимости, подводные камни using-директивы, 426
оператор присваивания вместо оператора равенства, 100
порядка вычисления подвыражений, 142
проблема висячего else, 195
проблемы константных ссылок и указателей, 106
проблемы побитовых операторов, 166
проблемы, связанные с глобальными объектами, 349
пропуска
завершающего нуля в C-строке, 402
скобок при освобождении динамически выделенного массива, 402
редактора связей
повторные определения, 386
смещения на единицу при доступе к массиву, 31
фазы связывания при наличии объявления в нескольких файлах, 383
Ошибки
конкретизации шаблона функции, 484
П
память
утечка, 35
параметр(ы)
объявление, сравнение с объявлением исключений, 540
размер, важность для передачи по значению, 327
списки параметров
переменной длины, многоточие, 343
различия перегруженных функций, 431
ссылочные, 329–33
влияние на преобразования при разрешении перегрузки функции, 457
преимущества эффективности, 330, 540
ранжирование, 471
сравнение с параметрами-указателями, 333–35
шаблона
использование указателей на константы, 101
не являюшиеся типами, 476
являюшиеся типами, проверка, 325–26
параметры функций
аргументы по умолчаниюю, 340–43
использования многоточия, 343–44
массивы, 335–39
при разрешении перегруженных функций, 430
проверка типов, 325–26
списки параметров, 325
сравнение параметров указательного и ссылочного типов, 333–35
сравнение с глобальными объектами, 349–50
ссылки, 107, 329–33
использование для возврата нескольких значений, 197
на константы, 331
преимущества в эффективности, 330
сравнение с параметрами-указателями, 333–35
тип возвращаемого значения
тип pair, 197
указатели, 329
указатели на функции, 370–73
переменные
глобальные параметры и возвращаемые значения, 349–50
константные, 100
объявление как член пространства имен, 408
переносимость
знак остатка, 143
перестановки, обобщенные алгоритмы, 589
перечисления, 110–13
основания для включения в язык, 110
расширение типа при разрешении перегрузки функции, 452
точное соответствие при разрешении перегрузки функции, 445
по умолчанию
аргументы, 340–43
и виртуальные функции, 910–13
влияние на выбор устоявших функций, 472
и устоявшие функции, 472–73
конструктор, см. конструктор, 678–79
побитовый(е)
оператор И (&), 164
оператор И с присваиванием (&=), 152, 164
оператор ИЛИ (!), 165
оператор ИСКЛЮЧАЮЩЕЕ ИЛИ (^), 165
оператор НЕ (~), 164
оператор сдвига (<<,>>), 165
операторы, 164–66
поддержка в классе bitset, 170
повторное возбуждение
исключения, 542–43
позиция
разрешение аргумента по позиции в списке, 341
поиск
rfind(), 278
подстрок, 280
элементов
множества, 306
отображения текста, 298–99
ПОО (правило одного определения), 382, 416–18
последовательные контейнеры, 248–319
вставка элементов, 265
критерии выбора, 252
обобщенные алгоритмы, 269–70
определение, 256
перестановка элементов, 269
присваивание, 268
удаление элементов, 267
предостережения
использование знакового бита в битовых векторах, 166
неопределенность порядка вычисления бинарных операторов сравнения, 147
опасности приведения типов, 178
подводные камни
using-директивы, 426
возврата l-значение, 348
возврата ссылки на объект, 348
глобальные объекты, 349
приведения типов, 181
шаблона класса auto_ptr, 399
представление
влияние на расширение типа перечисления, 452
информация о реализации в заголовочном файле limits, 145
строк, 92
целых чисел, 143
преобразование
bool в int, 109
l-значения в r-значение, 446–47
арифметическое, 177–78
бинарного объекта-функции в унарный, использование адаптора-связывателя, 573
выбор преобразования между типами классов, 764–76
выведение аргументов шаблона функции, 486
как точное соответствие при разрешении перегрузки функции, 459
квалификаторов
влияние на последовательность преобразований, 470
при выведении аргументов шаблона функции, 487
ранжирование при разрешении перегрузки функции, 470
конверторы, 445
конструкторы
конструкторы как конверторы, 761–64
множественные, разрешение неоднозначности приведения, 468
недопустимость преобразований между типами указателей на функции, 439
неявные преобразования типов, 176
определенное пользователем, 445
последовательности
определенных пользователем преобразований, 764–67
определенных пользователем, ранжирование при разрешении перегрузки функций, 771–76
определенных пользователем, с учетом наследования, 1034–36
стандартных преобразований, 468–72
ранжирование инициализации ссылок при разрешении перегрузки функции, 457
расширения типа, 175
аргументов, 451–53
типа перечисления в арифметические типы, 112
с потерей точности, предупреждение компилятора, 326
стандартное, 453–57
типа аргумента, 444–60
трансформации l-значений, 450
трансформация I-значений
преобразования при выведении аргументов шаблона функции, 486
трансформация I-значения
ранжирование при разрешении перегрузки функции, 468
указателей
в тип void* и обратно, 179
преобразования квалификаторов, 449
стандартные преобразования указателей, 456
трансформации l-значений, массива в указатель, 448
трансформации l-значений, функции в указатель, 448
явные преобразования типов, 144, 175, 178
препроцессор
комментарий
парный(/**/), 25
константы
__cplusplus__, 23
макросы
шаблоны функций как более безопасная альтернатива, 474
предкомпилированные заголовочные файлы, 385
приведение(я), 144
const_cast, оператор, опасность применения,, 180
dynamic_cast (), оператор, 1001–7
dynamic_cast()
идентификация класса объекта во время выполнения, 182
reinterpret_cast
опасности, 181
reinterpret_cast, оператор, 181
static_cast
сравнение с неявными преобразованиями, 180
static_cast, оператор, 181
выбор конкретизируемого шаблона функции, 485
для принудительного установления точного соответствия, 450
опасности, 181
сравнение нового синтаксиса со старым, 182
старый синтаксис, 182–83
применение для подавления оптимизации, 127
примеры
класс IntArray, 45
IntSortedArray, производный класс, 54
класс iStack, 183–87
поддержка динамического выделения памяти, 316–17
преобразование в шаблон stack, 318–19
класс String, 128–39
класс связанного списка, 221–47
обработка аргументов в командной строке, 356–57
система текстового поиска
(глава 6), 248–319
функция sort, 365
шаблон класса Array, 55–62, 849–57
SortedArray, производный класс, 993–98
примитивные типы
(глава), 98–139
присваивание
векторам, сравнение с встроенными массивами, 122
и поведение auto_ptr, 397
комплексных чисел, 155
массиву, недопустимость присваивания другого массива, 115
оператор
и требования к l-значению, 81
перегруженный, 709–12, 733–35
составной, 152
последовательному контейнеру, 268–69
почленное для объектов класса, 709–12
ссылке, 107
указателю на функцию, 367
вопросы, связанные с перегруженностью функции, 439
проверка
выхода за границы диапазона, 289
не выолняется для массивов, 116
типа
назначение и опасности приведения типов, 182
неявные преобразования, 326
объявления, разнесенного по нескольким файлам, 384
отмена с помощью многоточия в списке параметров, 343
параметра, 325–27
сохранения в шаблоне функции, 476
указателя, 88
программа, 14–21
производительность
auto_ptr, 397
классы, локальность ссылок, 191
компиляции
зависимость от размера заголовочного файла, 385
при конкретизации шаблонов функций, 497