7
我使用Visual Studio 2012旗艦版具有以下升壓Signals2代碼:在https://github.com/cfobel/boost_signals2/blob/master/hello_world_0.cpp 它生成以下錯誤:的Visual Studio 2012 c + +編譯錯誤與升壓信號2
c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(348): error 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'
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\xmemory(333) : see declaration of 'std::_Uninitialized_copy0'
1> c:\libraries\boost_1_52_0\boost\signals2\detail\auto_buffer.hpp(192) : see reference to function template instantiation '_FwdIt std::uninitialized_copy<I,boost::variant<T0_,T1>*>(_InIt,_InIt,_FwdIt)' being compiled
是Visual Studio的這個代碼不兼容2012年C++?使用是否安全?最後,我如何根據建議進行更改? 謝謝
非常有幫助的答案,但沒有觸及*「它仍然安全使用?」*。換句話說,boost :: signals2是什麼引起了這個警告,人們應該關心它嗎? – sgryzko
@sgryzko *沒有普遍的答案*它是安全的*,它取決於有問題的代碼。代碼是否有可能導致緩衝區溢出的錯誤?如果是,那麼MSVC功能可能會更好。如果不是,那麼'std :: uninitialized_copy'是絕對安全的。這些警告幾乎不可能避免在你希望能夠在多個編譯器上編譯的任何代碼中,因爲MSVC甚至會抱怨'std :: copy'(它希望你使用'std :: _ Copy_s')。 – Praetorian
@sgryzko和Heavy-Rocker-Dude ......你們倆是否曾經解決過這個問題?我現在有同樣的問題:只需使用boost :: signals將VS2010項目轉換爲VS2013,並且此警告正在出現。我不想關閉警告......我想讓代碼正確編譯無警告。有任何想法嗎? Thx提前。 –