我有一個簡單的C++與升壓像這樣:C++ Boost:這個警告的原因是什麼?
#include <boost/algorithm/string.hpp>
int main()
{
std::string latlonStr = "hello,ergr()()rg(rg)";
boost::find_format_all(latlonStr,boost::token_finder(boost::is_any_of("(,)")),boost::const_formatter(" "));
也能正常工作;它取代的每次出現(),着有「」
不過,我得到編譯時這樣的警告:
我使用MSVC 2008年,升壓1.37.0。
1>Compiling...
1>mainTest.cpp
1>c:\work\minescout-feat-000\extlib\boost\algorithm\string\detail\classification.hpp(102) : warning C4996: 'std::copy': 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 9.0\vc\include\xutility(2576) : see declaration of 'std::copy'
1> c:\work\minescout-feat-000\extlib\boost\algorithm\string\classification.hpp(206) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT>::is_any_ofF<boost::iterator_range<IteratorT>>(const RangeT &)' being compiled
1> with
1> [
1> CharT=char,
1> IteratorT=const char *,
1> RangeT=boost::iterator_range<const char *>
1> ]
1> c:\work\minescout-feat-000\minescouttest\maintest.cpp(257) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT> boost::algorithm::is_any_of<const char[4]>(RangeT (&))' being compiled
1> with
1> [
1> CharT=char,
1> RangeT=const char [4]
1> ]
我當然可以禁用使用
-D_SCL_SECURE_NO_WARNINGS
的警告,但我有點不願意這樣做之前,我找出什麼是錯的,或者更重要的是,如果我的代碼不正確。
這個警告讓我發瘋,它就像一杯咖啡熱的「警告」。 – Clay 2009-08-19 17:20:02
最糟糕的是沒有理智的「修復」。發佈大多數警告是因爲有更好的,更容易出錯的方式來實現相同的目的。他們可以*固定*。你應該怎麼做這件事?如果您有一個原始C數組,並且您需要將數據複製到其中或從中複製數據,則指針是唯一可用的迭代器類型。 std :: copy是迄今爲止使用的最安全的選項。還是他們建議我們回去寫循環來達到同樣的目的? – jalf 2009-08-19 17:58:38
我敢打賭100代表,它會在第一個SP和其他「不測試他們發佈的東西嗎?」中被刪除。問題... – 2010-12-19 16:03:23