2

重複の可能性:
出力を高速化するために cout と printf を混在させる

Microsoft Visual Studio 6.0 を使用しています。

以下のプログラム、

#include "stdafx.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
printf("a");
printf("b");
printf("c");
return 0;
}

「abc」を生成します。

次のプログラム中、

#include "stdafx.h"
#include "iostream.h"

int main(int argc, char* argv[])
{
printf("a");
cout<<"b";
printf("c");
return 0;
}

「acb」を生成します。

どうしたの?同じプログラムで cout と printf を混在させることはできませんか?

4

1 に答える 1

5

規格は次のように述べています。

標準の iostream オブジェクトstrが標準の stdio ストリームと同期されている場合fc

fputc(f, c);

の効果と同じです。

str.rdbuf()->sputc(c);

文字の任意のシーケンス。

デフォルトでは、 を呼び出さない限りsync_with_stdio(false)coutは と同期されstdoutます。したがって、2 番目のコード スニペットは次と同等です。

printf("a");
fputc(stdout, 'b')
printf("c");

実装でも「abc」を生成する必要があります。

結論: MSVC6 は標準に準拠していませんが、非常に古いものであるため驚くことではありません。

于 2012-12-02T08:01:05.577 に答える