1

coutがない場合、プログラムは正しく実行されます。なぜ?出力キャッシュに何か問題がありますか?

#include<algorithm>
#include<iostream>
#include<vector>

using namespace std;


class fn
{
    public:
        int i;
    bool operator()(int,int)
    {
        ++i;
        cout<<"what the poodles?\n";
    }
};
int main()
{
    vector<int> temp(9,9);
    vector<int> tmp(2,3);
    fn f;
    vector<int>::iterator ite;
    ite=find_first_of(temp.begin(),temp.end(),tmp.begin(),tmp.end(),f);
    if(ite==temp.end())cout<<"Pomeranians!\n";
    //cout<<"compared "<<f.i<<" time(s)\n";//if note this ,you'll get defferent output.
    return 0;
}
4

1 に答える 1

2

3つの考え:

  1. fn::operator()(int, int)を返しますがbool、return ステートメントはありません。その関数は適切な C++ ではありません。

  2. その行を修正すると、期待どおりの出力が得られます。回答の最初の部分で問題が解決しない場合は、表示される出力と期待される出力、およびそれらの違いについてのメモを使用して質問に詳しく説明してください。

  3. 初期化されていない変数もインクリメントしていますfn::i。これはあなたにとって何の役にも立ちません。コンストラクターで初期化する必要があります。この変数を印刷 (または何らかの方法で検査) しようとすると、開始値が何でも (0 の可能性があり、それ以外の可能性がある) 可能性があるため、任意の値を持つ可能性があります。


詳しく説明すると、コンパイラは次の問題について警告しました。

foo.cc:16:3: 警告: コントロールが void 以外の関数の最後に達しました [-Wreturn-type]

これを修正するためreturn false;に、ファンクターの最後に a を追加したところ、次の出力が表示されました。

[11:47am][wlynch@watermelon /tmp] ./foo
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
what the poodles?
Pomeranians!
于 2013-03-14T16:50:32.003 に答える