Zaškrtnuté iterátory
Zaškrtnuté iterátory zajistit, že hranice vašeho kontejneru nejsou přepsány.
Zaškrtnuté iterátory použít k uvolnění sestavení a ladění sestavení.Další informace o použití iterátory, při kompilaci v režimu ladění naleznete v tématu Iterační podpory ladění.
Poznámky
Informace o tom, jak zakázat upozornění, které jsou generovány pomocí Zaškrtnuté iterátory, viz _SCL_SECURE_NO_WARNINGS.
Tento symbol můžete používat s funkcí Zaškrtnuté iterátory.
_SECURE_SCL
Důležité Use _ITERATOR_DEBUG_LEVEL to control _SECURE_SCL.Další informace naleznete v tématu _ITERATOR_DEBUG_LEVEL.
Pokud _SECURE_SCL je definována jako 1, bezpečné použití iterátorů způsobuje chyba za běhu a program je ukončen.Pokud je definována jako 0, jsou zakázány Zaškrtnuté iterátory.Ve výchozím nastavení jsou hodnoty pro _SECURE_SCL je 0 pro verzi sestavení a 1 pro sestavení ladění.
Při _SECURE_SCL je definován jako 1, po SCL kontroly jsou prováděny:
Všechny standardní iterátory (například vector::iterator) jsou kontrolovány.
Pokud výstup iterace je zaškrtnutý iterátor obdržíte kontrolované chování na volání standardní funkce (například std::copy).
Je-li výstup iterátor je iterátor Nekontrolovaná volání standardní funkce způsobí, že upozornění kompilátoru.
Následující funkce bude generovat chybu za běhu, pokud je přístup, který je mimo hranice kontejneru:
Při _SECURE_SCL je definována jako 0:
Jsou všechny standardní iterátorů Nekontrolovaná (iterátorů můžete přesunout za hranice kontejneru, což vede k nedefinované chování).
Pokud výstup iterace je zaškrtnutý iterátor obdržíte kontrolované chování na volání standardní funkce (například std::copy).
Pokud výstup iterátor je iterátor Nekontrolovaná obdržíte nekontrolované chování na volání standardní funkce (například std::copy).
Zaškrtnutý iterátor odkazuje iterátor, který bude volat invalid_parameter_handler při pokusu o přesun za hranice kontejneru.Pro více informací o invalid_parameter_handler si prohlédněte Ověření parametrů.
checked_array_iterator Classa unchecked_array_iterator Class jsou iterátor adaptéry, které podporují Zaškrtnuté iterátory.
Příklad
Pokud kompilujete pomocí _SECURE_SCL 1, chyba runtime dojde v případě pokusu o přístup k elementu, který je mimo hranice kontejneru pomocí operátoru indexování určitých tříd.
// 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
};
Tento program bude vytištěno "67" pak pop výraz selhání dialogové okno knihovny s dalšími informacemi o chybě.
Podobně, pokud kompilujete pomocí _SECURE_SCL 1, chyba runtime dojde v případě pokusu o přístup k elementu pomocí přední nebo zadní straně určité třídy, když je prázdný kontejner.
// 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
};
Tento program bude vyskakující výraz selhání dialogové okno knihovny s dalšími informacemi o chybě.