Книга: Эффективное использование STL
Сайт STLport
Сайт STLport
Главная отличительная особенность STLport заключается в том, что эта модифицированная версия реализации STL от SGI (включая потоки ввода-вывода и т. д.) была перенесена более чем на 20 компиляторов. STLport, как и библиотека SGI, распространяется бесплатно. Если ваш код должен работать сразу на нескольких платформах, вы избавите себя от множества хлопот, если возьмете за основу унифицированную реализацию STLport и будете использовать ее со всеми компиляторами.
Большинство изменений кода SGI в реализации STLport связано с улучшением переносимости, однако STLport является единственной известной мне реализацией, в которой предусмотрен «отладочный режим» для диагностики случаев неправильного использования STL — компилируемых, но приводящих к непредсказуемым последствиям во время работы программы. Например, в совете 30 распространенная ошибка записи за концом контейнера поясняется следующим примером:
int transmogrify(int х); // Функция вычисляет некое новое значение
// по переданному параметру х
vector<int> values;
… // Заполнение вектора values данными
vector<int> results;
transform(values.begin(), // Попытка записи за концом results!
values.end(), results.end, transmogrify);
Этот фрагмент компилируется, но во время выполнения работает непредсказуемо. Если вам повезет, проблемы возникнут при вызове transform
, и отладка будет относительно элементарной. Гораздо хуже, если вызов transform
испортит данные где-то в другом месте адресного пространства, но это обнаружится лишь позднее. В этом случае определение причины порчи данных становится задачей — как бы выразиться? — весьма нетривиальной.
Отладочный режим STLport значительно упрощает эту задачу. При выполнении приведенного выше вызова transform
выдается следующее сообщение (предполагается, что реализация STLport установлена в каталоге C:STLport):
C:STLportstlportstldebug_iterator.h:265 STL assertion failure: _Dereferenceable(*this)
На этом программа прекращает работу, поскольку в случае ошибки отладочный режим STLport вызывает abort
. Если вы предпочитаете, чтобы вместо этого инициировалось исключение, STLport можно настроить и на этот режим.
Честно говоря, приведенное сообщение об ошибке менее понятно, чем хотелось бы, а имя файла и номер строки относятся к внутренней проверке условия STL, а не к строке с вызовом transform
, но это все же значительно лучше пропущенного вызова transform
и последующих попыток разобраться в причинах разрушения структур данных. В отладочном режиме STLport остается лишь запустить программу-отладчик, вернуться по содержимому стека к написанному вами коду и определить, что же произошло. Строка, содержащая ошибку, обычно находится достаточно легко.
Отладочный режим STLport распознает широкий спектр стандартных ошибок, в том числе передачу алгоритмам недопустимых интервалов, попытки чтения из пустого контейнера, передачу итератора одного контейнера в качестве аргумента функции другого контейнера и т. д. Волшебство основано на взаимном отслеживании итераторов и контейнеров. При наличии двух итераторов это позволяет проверить, принадлежат ли они одному контейнеру, а при модификации контейнера — определить, какие итераторы становятся недействительными.
В отладочном режиме реализация STLport использует специальные реализации итераторов, поэтому итераторы vector
и string
являются объектами классов, а не низкоуровневыми указателями. Таким образом, использование STLport и компиляция в отладочном режиме помогают убедиться в том, что ваша программа не игнорирует различия между указателями и итераторами для соответствующих типов контейнеров. Одной этой причины может оказаться достаточно для того, чтобы познакомиться с отладочным режимом STLport.
- Совет 50. Помните о web-сайтах, посвященных STL
- 3. Заработок для фотографов: заработать на фото – сайты фотобанков
- Кроссбраузерность вашего сайта
- Вот как мы можем повлиять на коммерческий фактор (иными словами, повысить доверие посетителей к сайту)
- 1.3.1. Индексирование сайта в поисковых системах
- Часть I Скрываем свое местонахождение и посещаем заблокированные сайты
- Сайт p2p.wrox.com
- Favicon – делаем сайт более заметным для пользователей
- Взимается ли с меня плата за посещение сайтов?
- У некоторых сайтов адрес начинается с www. Что это обозначает?
- На сайтах я читаю только текст и не хочу платить за картинки. Как их отключить?
- На сайтах вместо текста отображается непонятный набор символов