C++ 警告:使用字符串::find_first_not_of时,从int截断为char

C++ 警告:使用字符串::find_first_not_of时,从int截断为char,c++,C++,我们尝试清理项目并删除所有警告。 我收到这条线的警告: if(line.find_first_not_of('\n\t ') != string::npos) { warning C4305: 'argument' : truncation from 'int' to 'char' 我不知道该怎么办。。。这两个值都是size\u t,不确定它为什么会抱怨。警告具有误导性。它应该警告多字符到字符的转换,因为您使用的是'\n\t'(多字符)而不是“\n\t”(字符串) 无论如何,您需要在此处使用

我们尝试清理项目并删除所有警告。 我收到这条线的警告:

if(line.find_first_not_of('\n\t ') != string::npos) {

warning C4305: 'argument' : truncation from 'int' to 'char'

我不知道该怎么办。。。这两个值都是size\u t,不确定它为什么会抱怨。

警告具有误导性。它应该警告多字符到字符的转换,因为您使用的是
'\n\t'
(多字符)而不是
“\n\t”
(字符串)

无论如何,您需要在此处使用双引号:


希望这能有所帮助。

这是一个很好的例子,说明了为什么您应该始终在没有警告的情况下构建代码。正如纳瓦兹指出的那样,这一发现并不像它在简单阅读中所做的那样。当您修复它时,我希望您仔细测试,以确保没有依赖于旧的损坏行为的代码。@Stewart“……始终在生成代码时不发出警告。”?!?!?我不确定我是否遵循了这个逻辑。即使是一个误导性的警告也比忽略未定义/意外/错误的行为要好——它仍然指向这样一个事实,即在那个位置有些奇怪。。。编辑:哦,等等。。。你的意思可能是“确保构建代码时不会删除警告”,而不是“在禁用警告的情况下构建代码”…@twalberg——这正是我的意思。我的意思是你的构建应该没有警告,也就是说,当你构建的时候,它不应该产生任何警告。在我从事的每个项目中,我们都将警告级别设置为4,并将警告视为启用的错误。这样,您就无法签入生成警告的代码。我们有选择地禁用我们不喜欢的警告(我们有一个审查过程)。
 if(line.find_first_not_of("\n\t ") != string::npos)