Visual C ++: Чем полезен check_array_iterator? - PullRequest
6 голосов
/ 30 августа 2010

При компиляции кода на Уровень предупреждения 4 (/ W4) , я получаю C4996 предупреждений на std::copy() вызовах, параметры которых являются массивами C (не STL)контейнеры, как векторы).Рекомендуемое решение для решения этой проблемы, по-видимому, заключается в использовании stdext :: checked_array_iterator .

Для чего используется stdext :: checked_array_iterator ?Как это работает?

Почему он не выдает предупреждение о компиляции этого фрагмента ошибочного кода, скомпилированного в Visual C ++ 2010?:

#include <algorithm>
#include <iterator>
using namespace std;

int main()
{
    int arr0[5] = {100, 99, 98, 97, 96};
    int arr1[3];
    copy( arr0, arr0 + 5, stdext::checked_array_iterator<int*>( arr1, 3 ) );

    return 0;
}

1 Ответ

3 голосов
/ 30 августа 2010

Эта страница, Проверенные итераторы , описывает, как это работает, но эта цитата подводит итог: Проверенные итераторы гарантируют, что вы не перезаписываете границы вашего контейнера.

Так что, если вы выйдете за пределы итератора, он либо сгенерирует исключение, либо вызовет invalid_parameter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...