isspace 函数的性能警告,从 int 转换为布尔值


#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <iterator>
using namespace std;
bool notSpace(char c) {
return !isspace(c);
}
bool isSpace(char c) {
return isspace(c);
}
vector<string> split(const string& s) {
vector<string> words;
string::const_iterator i = s.begin();
while (i != s.end()) {
i = find_if(i, s.end(), notSpace); // "              "
if (i != s.end()) {
string::const_iterator j = i;
j = find_if(i, s.end(), isSpace);
words.push_back(string(i, j));
i = j;
}
}
return words;
}
int main() {
string test = "Hello world, I'm a simple guy";
vector<string> words = split(test);
for (vector<string>::size_type i = 0; i < words.size();i++) {
cout << words[i] << endl;
}
return 0;
}

当我编译代码时,我收到以下警告:

警告 C4800:"int":强制值为布尔值"真"或"假" (性能警告(

在返回此函数时:

bool isSpace(char c) {
return isspace(c);
}

好习惯会isspace(c)变成(isspace(c) != 0)吗?还是只是不必要的挑剔?

看看下面的代码:

#include <iostream>
using namespace std;
bool f()
{
return 2;
}
int main()
{
cout <<f()<<endl;
return 0;
}

当您返回 1 时,它将打印 2,这就是您收到警告的原因。 有人可能认为布尔值是一种小整数,但事实并非如此。

如果你回到C,没有bool类型,这就是为什么许多C方法(如isspace(返回int,即使是WINDOWS类型的BOOL实际上也是一种整数,可以返回其他值,但TRUE(1(或FALSE(0(。

最新更新