2016-08-15 3 views
1

The C++ Standard Library - A Tutorial and Reference, 2nd Edition относится к безопасным версиям STL, которые поддерживают различные утилиты, такие как проверки времени выполнения для operator [] и других операторов. Например, на P247:Безопасные версии STL на Linux

Таким образом, это хорошая идея использовать «безопасный» СТЛ, по крайней мере, в течение программного обеспечения развития. Первая версия безопасного STL была введена Кэри Хорстманом (см. [SafeSTL]). Другим примером является «STLport», который является , доступным бесплатно практически для любой платформы по адресу [STLPort]. Кроме того, поставщики библиотек теперь предоставляют флаги, чтобы включить режим «более безопасный», который должен быть включен во время разработки, особенно .

Оба предлагаемых пакета кажутся относительно датированными (последний раз разработанный в 2008 году) и не включают более свежие возможности C++ 11/14. Есть ли еще более известные репутационные реализации, доступные для/с некоторыми из основных компиляторов в Linux (gcc или clang) или как автономные библиотеки?

+1

Можете ли вы на самом деле указать, где он говорит это? Я думаю, что это может означать использование 'at' вместо' operator [] ', поскольку' at' ограничивает проверку, где 'operator []' does not. – NathanOliver

ответ

6

libstdC++ имеет debug mode, который может быть включен путем определения _GLIBCXX_DEBUG при компиляции.

на сообщение ++ режим отладки libstdc выполняет проверку для многих областей стандарта С ++, но акцент делается на проверке взаимодействия между стандартными итераторы, контейнеров и алгоритмов, в том числе:

  • Safe итераторы: Итераторы отслеживают контейнер, элементы которого они ссылаются, поэтому сразу диагностируются такие ошибки, как увеличение итератора, прошедшего через конец, или разыменование итератора, указывающего на разрушенный контейнер.

  • Предварительные условия алгоритма: Алгоритмы пытаются проверить свои входные параметры для обнаружения ошибок как можно раньше. Например, алгоритм set_intersection требует, чтобы его параметры итератора first1 и last1 сформировали допустимый диапазон итераторов и что последовательность [first1, last1) сортируется в соответствии с тем же предикатом, который был передан в set_intersection; режим debug libstdC++ обнаруживает ошибку, если последовательность не сортируется или сортируется по другому предикату.

проверки границ в operator[]is included.

+0

Я читал о 'включенном определением _GLIBCXX_DEBUG' в нескольких местах, но что именно ** именно ** означает это? Я передаю '-D_GLIBCXX_DEBUG' компилятору через командную строку? – shuhalo

+1

@shuhalo yup! - – Quentin

Смежные вопросы