C++ 重方法调用块cout

C++ 重方法调用块cout,c++,cout,C++,Cout,可能重复: 我有一个非常重的方法(它检查一个数字是否是素数-Euler 3),它阻止cout 这怎么可能?这是我的代码: int main(int argc, char * argv[]) { cout << "-----------------------------------------------------------" << endl; cout << "isPrime(3): " << ((isPrime(3)) ?

可能重复:

我有一个非常重的方法(它检查一个数字是否是素数-Euler 3),它阻止
cout

这怎么可能?这是我的代码:

int main(int argc, char * argv[]) {
    cout << "-----------------------------------------------------------" << endl;
    cout << "isPrime(3): " << ((isPrime(3)) ? "true" : "false") << endl;
    cout << "isPrime(10): " << (isPrime(10) ? "true" : "false") << endl;
    cout << "BLAH";
    cout << "BLAH";
    cout << "BLAH";
    cout << "BLAH";
    cout << "BLAH";
    cout << "BLAH";
    cout << "isPrime(600851475143): " << (isPrime(600851475143.0) ? "true" : "false") << endl; // This one takes very long to complete
    cout << "-----------------------------------------------------------";
}
然后停下来(几分钟)。(
isPrime()
坏了,我知道!) 如果我用isPrime(600851475143)out注释行,它会在不到一秒钟内输出除注释行输出之外的所有内容


一个非常重的方法调用怎么可能会阻塞本应写入
cout
的输出?

cout
写入标准输出,标准输出通常是行缓冲的。i、 e.只有当缓冲区遇到换行符或
endl
时,或者当您显式调用
cout.flush()
cout
写入标准输出时,缓冲区才会刷新到控制台,标准输出通常是行缓冲的。i、 e.只有当缓冲区遇到换行符或
endl
时,或者当您显式调用
cout.flush()
时,缓冲区才会刷新到控制台。流缓冲输出,并且只有在看到换行符时才将其写入控制台。

流缓冲输出,并且仅当它看到换行符时才将其写入控制台。

如果使用
cout.flush()cout.flush(),则使用code>或
cout
是否您的函数
isPrime
中可能存在一些问题。e、 它可能会陷入一个循环中。不,这个数字非常大(而且它的逻辑被破坏了,所以它会运行更长的时间)。我等了好几次才完成@sgar91@RaymondChen这就是为什么为你的问题设置一个好的标题很重要。这样其他人就可以更容易地找到答案。另一个人做得很糟糕,每个人都很痛苦。您的函数
isPrime
可能有问题。e、 它可能会陷入一个循环中。不,这个数字非常大(而且它的逻辑被破坏了,所以它会运行更长的时间)。我等了好几次才完成@sgar91@RaymondChen这就是为什么为你的问题设置一个好的标题很重要。这样其他人就可以更容易地找到答案。那个人做得很糟糕,每个人都很痛苦。谢谢!我会在12分钟内接受你的回答!非常感谢。我会在12分钟内接受你的回答!
[Session started at 2013-01-19 13:50:12 +0100.]
-----------------------------------------------------------
isPrime(3): false
isPrime(10): false