Sdílet prostřednictvím


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á poznámkaDů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:

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ě.

Viz také

Referenční dokumentace

Standardní knihovna C++ – přehled

Iterační podpory ladění