Visual Studio Предупреждение C4996
Я получаю следующее предупреждение
warning C4996: 'std::_Uninitialized_copy0': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' c:\program files\microsoft visual studio 10.0\vc\include\memory 348
Я не могу найти какую-либо информацию, которая помогла бы бороться с этим предупреждением. Глядя на вывод, кажется, что это предупреждение как-то связано с Boost.Signals2 и auto_buffer.
Это безопасно игнорировать или я могу как-то удалить это?
2 ответа
Во-первых, я хотел бы сказать, что мне очень нравятся предупреждения компилятора. Я вызываю gcc с -Wall -Wextra.
Тем не менее, предупреждение MSVC C4996 в основном срабатывает на полностью действительный код. Изменения, предложенные в тексте предупреждения, часто серьезно подрывают переносимость кода, хотя они никогда существенно не улучшают качество кода. Поэтому я регулярно подавляю это предупреждение в моих проектах MSVC (Свойства проекта->C++-> Дополнительно-> Отключить определенные предупреждения).
Эта ошибка генерируется, потому что код, который она создает, не является потокобезопасным. Это означает, что если вы используете многопоточное кодирование, некоторые из ваших потоковых операций ввода-вывода могут (и, вероятно, будут) потеряны, потому что внутренние буферы ввода-вывода являются общими. Предложенные замещающие функции устранили эту проблему.