Iteradores selecionados
Iteradores verificados garantem que os limites de seu recipiente não são substituídos.
Iteradores verificados se aplicam para liberar compilações e depurar compilações.Para obter mais informações sobre como usar iteradores quando você compila no modo de depuração, consulte Depurar iterador suporte.
Comentários
Para obter informações sobre como desativar avisos que são gerados por iteradores verificados, consulte _SCL_SECURE_NO_WARNINGS.
Você pode usar o seguinte símbolo com o recurso selecionado de iteradores.
_SECURE_SCL
Importante Use _ITERATOR_DEBUG_LEVEL para controlar _SECURE_SCL.Para obter mais informações, consulte _ITERATOR_DEBUG_LEVEL.
Se _SECURE_SCL é definido como 1, o uso não seguro de iteradores causa um erro de tempo de execução e o programa é encerrado.Se definido como 0, iteradores são verificados desativados.Por padrão, o valor para _SECURE_SCL é 0 para compilações de versão e 1 para compilações de depuração.
Quando _SECURE_SCL é definido como 1, as verificações de para a LCC são executadas:
Todos iteradores padrão (por exemplo, vector::iterator) são verificados.
Se um iterador de saída é um iterador verificado você obterá o comportamento verificado em chamadas para a função padrão (por exemplo, std::copy).
Se o iterador de saída é chamadas não-verificados de um iterador a função padrão causarão avisos do compilador.
As seguintes funções irão gerar um erro de tempo de execução se houver um acesso que está fora dos limites do contêiner:
Quando _SECURE_SCL é definido como 0:
Todos iteradores padrão são desmarcados (iteradores podem mover além das fronteiras do contêiner, que resulta em um comportamento indeterminado).
Se um iterador de saída é um iterador verificado você obterá o comportamento verificado em chamadas para a função padrão (por exemplo, std::copy).
Se um iterador de saída é um iterador não-verificada você obterá o comportamento não-verificada em chamadas para a função padrão (por exemplo, std::copy).
Um iterador verificado se refere a um iterador que chama invalid_parameter_handler se você tentar se mover após os limites do contêiner.Para obter mais informações sobre invalid_parameter_handler, consulte Validação de parâmetro.
checked_array_iterator Class e unchecked_array_iterator Class são adaptadores de iterador que suportam iteradores verificados.
Exemplo
Quando você cria usando _SECURE_SCL 1, um erro de tempo de execução ocorrerá se você tentar acessar um elemento que está fora dos limites do contêiner usando o operador de indexação de determinadas classes.
// 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 será impresso para fora “67 " aparece em uma caixa de diálogo falha de declaração com informações adicionais sobre a falha.
Da mesma forma, quando você cria usando _SECURE_SCL 1, um erro de tempo de execução ocorrerá se você tentar acessar um elemento usando frente ou voltar de determinadas classes, quando o contêiner está vazia.
// 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 será exibido acima uma caixa de diálogo falha de declaração com informações adicionais sobre a falha.