1

重複の可能性:
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 << "-----------------------------------------------------------";
}

このように、次のように出力します。

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

その後停止します (数分間)。(isPrime()が壊れていることはわかっています!) isPrime(600851475143)out を付けずに行をコメントすると、もちろん、コメント行の出力を除くすべてが 1 秒以内に出力されます。

非常に重いメソッド呼び出しが、既に書き込まれているはずの出力をブロックする可能性はありcoutますか?

4

3 に答える 3

5

cout通常はラインバッファリングされている標準出力に書き込みます。つまり、バッファーは、改行文字または に遭遇した場合endl、または明示的に を呼び出した場合にのみ、コンソールにフラッシュされますcout.flush()

于 2013-01-19T13:02:02.383 に答える
1

cout.flush();またはを使用するcout << endl;と、フラッシュの時点まで保留されている出力が出力されます。

これは、cout が I/O 呼び出しを効率的に使用しようとするためです。すべてのコードが 1 つのスレッドで実行されるため、タイムアウトなどを追加する方法がないため、数分かかる呼び出しがある場合、出力は処理されません。

于 2013-01-19T13:03:17.690 に答える
0

ストリームは出力をバッファリングし、改行文字が検出された場合にのみコンソールに書き込みます。

于 2013-01-19T13:02:43.313 に答える