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

三个想法:

  1. fn::operator()(int, int)返回一个bool但没有返回语句。该函数不是正确的 C++。

  2. 当我修复那条线时,我得到了我期望的输出。如果答案的第一部分不能解决您的问题,您能否在您的问题中详细说明您看到的输出和您期望的输出,并说明它们之间的差异。

  3. 您还增加了一个未初始化的变量fn::i。这对你没有任何帮助。您应该在构造函数中对其进行初始化。如果您尝试打印此变量(或以任何方式检查它),它可能有任何值,因为它的起始值可能是任何值(可能是 0,也可能是其他任何值)。


详细地说,我的编译器警告我以下问题:

foo.cc:16:3:警告:控制到达非空函数的结尾 [-Wreturn-type]

为了解决这个问题,我return false;在函子的末尾添加了一个,我看到了以下输出,这对我来说很有意义。

[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 回答