mardi 18 juillet 2017

Performance warning for isspace function, conversion from int to bool

#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;
}

When I compile the code I get this warning:

warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)

on the return of this function:

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

Is good habit changing isspace(c) to (isspace(c) != 0) ? Or is it just an unnecessary fussiness?

Aucun commentaire:

Enregistrer un commentaire