Поделиться через


Проверяемые итераторы

Установленные итераторы гарантируют, что не перезаписываются границы для контейнера.

Установленные итераторы применяются к построениям выпуска и отладки построения.Дополнительные сведения об использовании итераторы при компилировать в режиме отладки см. в разделе Поддержка итераторов отладка.

Заметки

Дополнительные сведения об отключении предупреждения, создаваемые проверенными итераторами см. в разделе _SCL_SECURE_NO_WARNINGS.

Можно использовать следующий символ с функцией проверенной итераторов.

  • _SECURE_SCL

    Важное примечаниеВажно

    Используйте _ITERATOR_DEBUG_LEVEL в элемент управления _SECURE_SCL.Для получения дополнительной информации см. _ITERATOR_DEBUG_LEVEL.

    Если _SECURE_SCL определен как 1, небезопасное использование итераторов вызовет ошибку во время выполнения и программы.Если определен как 0, установленные итераторы запрещены.По умолчанию значение для _SECURE_SCL в построениях выпуска 0 и 1 для отладки построения.

Если _SECURE_SCL определен как 1, после проверки вероятности нежелательной почты выполняются:

Если _SECURE_SCL определен как 0.

  • Все стандартные итераторы сниманы флажок (итераторы могут перемещаться за границы контейнера, который приводит к расширению функциональности, не определенный).

  • Если итератор вывода проверяемый итератор, появится проверяется расширение функциональности на вызове стандартной функции (например, std::copy).

  • Если итератор вывода снят итератор будет возвращено неограниченное расширение функциональности на вызове стандартной функции (например, std::copy).

Проверяемый итератор относится к итератору вызывает invalid_parameter_handler при попытке переместить за границами контейнера.Дополнительные сведения о invalid_parameter_handler см. в разделе Проверка параметров.

checked_array_iterator Class и unchecked_array_iterator Class переходники итератора, поддерживающие установленные итераторы.

Пример

При компилировать с помощью _SECURE_SCL 1, ошибка во время выполнения возникает при попытке получить элемент, который находится вне границ контейнера с помощью оператора индексирования определенных классов.

// checked_iterators_1.cpp
// cl.exe /Zi /MDd /EHsc /W4
 
#define _ITERATOR_DEBUG_LEVEL 1
// implies #define _SECURE_SCL 1
 
#include <vector>
#include <iostream>
 
using namespace std;
 
int main() 
{
    vector<int> v;
    v.push_back(67);
 
    int i = v[0];
    cout << i << endl;
 
    i = v[1]; // triggers invalid parameter handler
};

Программа напечатает out "67" затем извлекает диалоговое окно ложности утверждения с дополнительными сведениями об ошибке.

Аналогично при компилировать с помощью _SECURE_SCL 1, ошибка во время выполнения возникает при попытке получить элемент с помощью перед или обратно определенных классов, когда контейнер пуст.

// checked_iterators_2.cpp
// cl.exe /Zi /MDd /EHsc /W4
 
#define _ITERATOR_DEBUG_LEVEL 1
// implies #define _SECURE_SCL 1
 
#include <vector>
#include <iostream>
 
using namespace std;
 
int main() 
{
    vector<int> v;
 
    int& i = v.front(); // triggers invalid parameter handler
};

Программа извлекает вверх диалоговое окно ложности утверждения с дополнительными сведениями об ошибке.

См. также

Ссылки

Стандартный общие сведения о библиотеке C++

Поддержка итераторов отладка