にCOUTとwcoutをミキシング:は、私は次のコードを持っていた「C++クックブック」を読んでいた同じプログラム
// cout << s << std::endl; // You shouldn't be able to
wcout << ws << std::endl; // run these at the same time
あなたは、実際の例を見ることに興味があるなら、ここにa link to the page on Google booksです。
また、私はこれを見つけました。これは、wcoutとcoutの混合が問題ないと言われています。SO question誰かがこのコメントが話していることを私に説明できますか? C++標準[27.4.1]から
EDIT
:ワイド対応狭文字ストリームの操作をミキシング
は、指定されたように、ファイルに対するそのような混合操作と同じセマンティクスを以下ISO C標準の改正1 C標準[7.19.2]から
:
各ストリームは、配向性を有します。ストリームが外部ファイルに関連付けられた後で、操作が実行される前に が実行されると、ストリームは方向がありません。広域文字入力/出力関数が方向なしでストリームに適用されると、ストリームはワイド・オリエンテッド・ストリームになります。同様に、バイト入出力関数が方向なしでストリームに適用されると、ストリームはバイト指向のストリームになります。 freopen関数またはfwide関数を呼び出すだけで、ストリームの方向を変更することができます。 freopenの呼び出しが成功すると、方向は削除されます。
バイト指向のストリームには、バイト入出力関数を適用してはならず、幅広のストリームには文字の入出力機能を適用してはなりません。
標準では、それらを混在させるべきではないと言われています。しかし、私はこの引用を見つけたfrom this article:
fwide関数は実装されていないと文書化されています。実用的な観点からは、少なくとも出力行全体のレベルでは、明らかにcoutとwcoutの混在をうまく使っています。幸いなことに、Visual C++は明らかに標準の要件を無視し、明白ではない明示的なC FILEストリームの向きを維持しません。
そしてまた、GCCについて、私はhereから、この引用を見つけた:
これは、(新)機能ではなく、バグで、中に流れの向きについてのlibstdC++/11705および一般的な検索で を見ますC標準(C99,7.19.2)。簡単に言えば、 は、バイト指向とワイド指向の入出力を混在させることはできません。今のところバグ がlibstdC++/11705で指摘されているので、あなたは の期待値に近いものをstd :: ios :: sync_with_stdio(false)を呼び出して得ることができます。あなたのプログラム の冒頭にあります。
実際に私は間違いかもしれないと思ったので、本の正誤表を確認しましたが、何も見つかりませんでした。 –
@Jesse:著者に連絡する時間、たぶん。 –
あなたは何を意味し、何が実際に起こるかを説明できますか?「どちらもSTDOUTにマップされていますか? 、ありがとう –