Iteratori verificati

Gli iteratori verificati assicurarsi che i limiti del contenitore non vengano sovrascritti.

Gli iteratori verificati vengono applicate le compilazioni di rilascio e compilazioni di debug.Per ulteriori informazioni su come utilizzare gli iteratori quando si esegue la compilazione in modalità di debug, vedere Supporto iteratori di debug.

Note

Per informazioni su come disabilitare gli avvisi generati dagli iteratori verificati, vedere _SCL_SECURE_NO_WARNINGS.

È possibile utilizzare il simbolo con le funzionalità basate di iteratori.

  • _SECURE_SCL

    Nota importanteImportante

    Utilizzo _ITERATOR_DEBUG_LEVEL controllare _SECURE_SCL.Per ulteriori informazioni, vedere _ITERATOR_DEBUG_LEVEL.

    Se _SECURE_SCL è definito come 1, l'utilizzo degli iteratori non causa un errore di runtime e il programma viene chiuso.Se definito come 0, gli iteratori verificati sono disabilitati.Per impostazione predefinita, il valore per _SECURE_SCL è 0 per le compilazioni di rilascio e 1 per le compilazioni di debug.

Quando _SECURE_SCL è definito come 1, i controlli seguenti di SCL vengono eseguiti:

Quando _SECURE_SCL è definito come 0:

  • Tutti gli iteratori standard vengono deselezionati (iteratori possono spostarsi oltre i limiti del contenitore, pertanto un comportamento indefinito).

  • Se un iteratore di output è un iteratore verificato il comportamento viene controllato nelle chiamate alla funzione standard (ad esempio, std::copy).

  • Se un iteratore di output è un iteratore deselezionato si otterrà un comportamento non incluso nelle chiamate alla funzione standard (ad esempio, std::copy).

Un iteratore verificato si riferisce a un iteratore che chiamerà invalid_parameter_handler se si tenta di passare oltre i limiti del contenitore.Per ulteriori informazioni su invalid_parameter_handler, vedere Convalida dei parametri.

checked_array_iterator Class e unchecked_array_iterator Class sono gli adattatori di iteratore che supportano gli iteratori verificati.

Esempio

Quando si utilizza _SECURE_SCL 1, un errore di runtime si verifica se si tenta di accedere a un elemento che non rientra nei limiti del contenitore tramite il responsabile di indicizzazione di alcune classi.

// 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
};

Questo programma verrà stampato out "67 " si estrae una finestra di dialogo errore di asserzione con informazioni aggiuntive sull'errore.

Analogamente, quando si utilizza _SECURE_SCL 1, un errore di runtime si verifica se si tenta di accedere a un elemento utilizzando la parte precedente o la parte finale di alcune classi, quando il contenitore è vuoto.

// 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
};

Questo programma visualizzato in una finestra di dialogo errore di asserzione con informazioni aggiuntive sull'errore.

Vedere anche

Riferimenti

Panoramica della libreria C++ standard

Supporto iteratori di debug