Предупреждение 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.

Можно ли игнорировать это или удалить его каким-либо образом?

Ответ 1

Во-первых, я хотел бы сказать, что я очень люблю предупреждения компилятора. Я вызываю gcc с -Wall -Wextra.

Однако предупреждение MS4C C4996 в основном запускает полностью действующий код. Изменения, предлагаемые в тексте предупреждения, часто серьезно ухудшают переносимость кода, хотя они никогда существенно не улучшают качество кода. Таким образом, я регулярно подавляю это предупреждение в своих проектах MSVC (Свойства проекта → С++ → Дополнительно → Отключить специальные предупреждения).

Также проверьте этот и который обсуждает.

Ответ 2

Эта ошибка генерируется, потому что код, который создает компилятор, не является потокобезопасным. Это означает, что если вы используете многопоточное кодирование, некоторые из ваших потоковых операций ввода-вывода могут (и, вероятно, будут) потеряны, потому что внутренние буферы ввода-вывода используются совместно. Предложенные функции замены "устранят" эту проблему.