重方法调用块cout

116*_*684 1 c++ cout

可能重复:
为什么我的cout输出不会立即出现?

我有一个非常重的方法(它检查一个数字是否是素数 - 欧拉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 << "-----------------------------------------------------------";
}
Run Code Online (Sandbox Code Playgroud)

像这样,它输出:

[Session started at 2013-01-19 13:50:12 +0100.]
-----------------------------------------------------------
isPrime(3): false
isPrime(10): false
Run Code Online (Sandbox Code Playgroud)

然后停止(几分钟).(isPrime()坏了,我知道!)如果我没有评论该行isPrime(600851475143),它会在不到一秒的时间内输出除注释行输出之外的所有内容.

一个非常繁重的方法调用阻止应该已经写入的输出怎么可能cout

Oli*_*rth 5

cout写入标准输出,通常是行缓冲.即缓冲区仅在遇到换行符时或者endl显式调用时才刷新到控制台cout.flush().