首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isspace函数的性能警告,从int到bool的转换

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

Stack Overflow用户
提问于 2017-07-18 16:15:38
回答 1查看 223关注 0票数 0
代码语言:javascript
复制
#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':强制值为'true‘或'false’(性能警告)

在此函数返回时:

代码语言:javascript
复制
bool isSpace(char c) {
    return isspace(c);
}

好习惯会把isspace(c)变成(isspace(c) != 0)吗?还是说这只是不必要的麻烦?

EN

回答 1

Stack Overflow用户

发布于 2017-07-18 16:39:21

看看下面的代码:

代码语言:javascript
复制
#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类型的BOOL实际上也是整数,可以返回除TRUE (1)或FALSE (0)以外的其他值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45172209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档