Проверяемые итераторы
Установленные итераторы гарантируют, что не перезаписываются границы для контейнера.
Установленные итераторы применяются к построениям выпуска и отладки построения.Дополнительные сведения об использовании итераторы при компилировать в режиме отладки см. в разделе Поддержка итераторов отладка.
Заметки
Дополнительные сведения об отключении предупреждения, создаваемые проверенными итераторами см. в разделе _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, после проверки вероятности нежелательной почты выполняются:
Все стандартные итераторы (например, vector::iterator) проверяется.
Если итератор вывода проверяемый итератор, появится проверяется расширение функциональности на вызове стандартной функции (например, std::copy).
Если итератор вывода, вызовы непроверенные итератора в стандартной функции вызовут предупреждения компилятора.
Следующие функции вызовут ошибку во время выполнения, если доступ, выходящее за пределы границ контейнера.
Если _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
};
Программа извлекает вверх диалоговое окно ложности утверждения с дополнительными сведениями об ошибке.