isspace函数的性能警告,从int转换为bool

时间:2017-07-18 16:15:38

标签: c++ if-statement type-conversion

#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'true'或'false'   (绩效警告)

返回此功能:

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

良好的习惯是将isspace(c)更改为(isspace(c) != 0)吗?还是只是一种不必要的烦恼?

1 个答案:

答案 0 :(得分:0)

看看下面的代码:

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

当你返回2时它会打印1,这就是你收到警告的原因。 有人可能认为bool是一种小整数,但它不是。

如果你回到C,那就没有bool类型,这就是为什么许多C方法(如isspace)返回int,甚至WINDOWS类型为{{} 1}}实际上是一种整数,可以返回除BOOL(1)或TRUE(0)之外的其他值。