编译时带有 boost::split 的警告[重复]
Posted
技术标签:
【中文标题】编译时带有 boost::split 的警告[重复]【英文标题】:Warning with boost::split when compiling [duplicate] 【发布时间】:2013-01-03 15:05:12 【问题描述】:可能重复:Why does calling boost:split() give so many warnings?
所以,这是我的代码:
Account ParseString(string data)
vector <string> fields;
boost::split( fields, data, boost::is_any_of( "a,;" ));
int limit = fields.size();
for(int i = 0; i < limit; i++)
cout << fields[i] << endl;
这是我在尝试编译时得到的:
d:\program files (x86)\visualstudio\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': 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'
我的问题是,我做错了什么?我可以做些什么来防止这些错误消息?
【问题讨论】:
可以禁用该警告。 This warning is an error in MSVC2012. 此警告是 MSVS2017 中的错误 【参考方案1】:你没有做错任何事。 Visual Studio 过于谨慎。在调试模式下,Visual Studio 使用称为“检查迭代器”的东西。指针也是迭代器,但检查机制不适用于它们。因此,当使用指针调用标准库算法时,boost::split
会执行此操作,它会发出此警告。
这个明显安全的代码你会得到同样的警告:
int main()
int x[10] = ;
int y[10] = ;
int *a = x, *b = y;
std::copy(a, a+10, b);
禁用警告。这是给初学者的。为了初学者的安全,它默认是打开的,因为如果它默认关闭,他们将不知道如何打开它。
【讨论】:
谢谢,我在哪里可以关闭它? :) @Theolodis:将-D_SCL_SECURE_NO_WARNINGS
添加到命令行。在 IDE 中,您可以转到“项目 -> 属性 -> C/C++ -> 命令行”并将其添加到附加选项字段中。【参考方案2】:
你没有做错任何事,如果你看一下警告,它似乎并不那么可怕:) 另外我相信在这种情况下你不需要对该警告执行任何操作。
【讨论】:
以上是关于编译时带有 boost::split 的警告[重复]的主要内容,如果未能解决你的问题,请参考以下文章