2017-07-18 18 views
0
#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; 
} 

への変換私は、コードをコンパイルするとき、私はこの警告を得る:
パフォーマンス警告、int型からブール

はC4800警告: 'INT': 'BOOLする値を強制的に '真' かをこの関数の戻り値に(パフォーマンス警告)

「偽:

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

良い習慣はisspace(c)から(isspace(c) != 0)に変更されますか?それとも、ほんとうに不必要なことなのですか?

+0

なぜ機能が必要なのですか? –

+1

コンパイラは、あなたが提案したことを基本的に行っていることを伝えています(int戻り値をboolに変換するため)。だから私の意見では、警告を閉じ込めるコードを追加することもできます。 –

+0

パラメータを 'isSpace'に、' notSpace'を 'char'から' unsigned char'に変更することで、より多くの* *を得ることができます。あなたがアクセント、ウムラウトなどで文字を入力したときに、この方法で完全に壊れた動作を得ることはありません。 –

答えて

0

以下のコードを見てみましょう:あなたは2を返すとき、それはあなたが警告を受ける理由です、1を出力します

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

を。 誰かがブールが一種の小さな整数だと思うかもしれませんが、そうではありません。

あなたが戻ってCに行く場合は、boolタイプ(isspaceのような)なぜ、多くのCの方法それはだ、ありませんでした、intを返すBOOLのも、WINDOWSタイプは、一種の整数実際にであり、他の値を返すことができますが、TRUE(1)またはFALSE(0)。

関連する問題