Iteradores comprobados

Los iteradores comprobados garantizan que los límites del contenedor no se sobrescribieron.

Los iteradores comprobados se aplican para liberar compilaciones y depurar compilaciones.Para obtener más información sobre cómo usar iteradores cuando se compila en modo de depuración, vea Compatibilidad de iterador de depuración.

Comentarios

Para obtener información sobre cómo deshabilitar las advertencias generadas por iteradores comprobados, vea _SCL_SECURE_NO_WARNINGS.

Puede utilizar el símbolo siguiente con la característica búsqueda de iteradores.

  • _SECURE_SCL

    Nota importanteImportante

    Uso _ITERATOR_DEBUG_LEVEL de controlar _SECURE_SCL.Para obtener más información, vea _ITERATOR_DEBUG_LEVEL.

    Si _SECURE_SCL se define como 1, el uso no seguro de iteradores produce un error en tiempo de ejecución y se finaliza el programa.Si se define como 0, se deshabilitan los iteradores comprobados.De forma predeterminada, el valor de _SECURE_SCL es 0 para las versiones de lanzamiento y 1 para las versiones de depuración.

Cuando _SECURE_SCL se define como 1, se realizan comprobaciones de siguiente de SCL:

Cuando _SECURE_SCL se define como 0:

  • Desactiva todos los iteradores estándar (iteradores pueden moverse más allá de los límites del contenedor, lo que da lugar a un comportamiento no definido).

  • Si un iterador de salida es un iterador comprobado obtendrá comportamiento protegido en las llamadas a la función estándar (por ejemplo, std::copy).

  • Si un iterador de salida es un iterador no obtendrá comportamiento desactivado en las llamadas a la función estándar (por ejemplo, std::copy).

Un iterador comprobado hace referencia a un iterador que llame a invalid_parameter_handler si intenta pasar los límites del contenedor.Para obtener más información sobre invalid_parameter_handler, vea Validación de parámetros.

checked_array_iterator Class y unchecked_array_iterator Class son los adaptadores de iterador que admiten iteradores comprobados.

Ejemplo

Cuando compile con _SECURE_SCL 1, un error de tiempo de ejecución aparecerá si intenta tener acceso a un elemento que está fuera de los límites del contenedor mediante el operador de indización de algunas clases.

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

Este programa imprimirá “67 " y extrae un cuadro de diálogo de error de aserción con información adicional sobre el error.

De igual forma, cuando se compila con _SECURE_SCL 1, un error de tiempo de ejecución aparecerá si intenta tener acceso a un elemento mediante nuevo o la reproducción de algunas clases, cuando el contenedor está vacío.

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

Este programa surgirá un cuadro de diálogo de error de aserción con información adicional sobre el error.

Vea también

Referencia

Información general de la biblioteca estándar de C++

Compatibilidad de iterador de depuración