同じプログラム内でワイド出力ストリームとナロー出力ストリームを混合する
「C Cookbook」では、cout と wcout を混合することが記載されています。同じプログラムを実行すべきではありません。このコメントは、C および C 標準ではストリームには方向があることが規定されており、この方向がストリームに設定されたら、その方向と互換性のない操作を混在させるべきではないという事実に由来しています。これは実際には意味するのでしょうか?
cout または wcout が初めて呼び出されるとき、stdout の方向が設定されます。 cout の場合、stdout はバイト指向のストリームになり、wcout の場合、stdout はワイド指向のストリームになります。 C 標準 [27.4.1] および C 標準 [7.19.2] に従って、ストリームの方向が設定された後は、そのストリームの方向と互換性のない関数を呼び出すべきではありません。
ルールの例外
ただし、すべてのコンパイラーがこの標準に厳密に従っているわけではないことに注意することが重要です。たとえば、Visual C 10.0 では、fwide 関数 (ストリームの方向を設定するために使用される) は実装されていません。したがって、Visual C では、 cout と wcout を混合することが許可されています。
同様に、GCC の初期バージョンでは、修正されたバグにより、std を呼び出すことで同じプログラム内で cout と wcout を呼び出すことができました。 ::ios::sync_with_stdio(false); ただし、これらはルールの例外であることに留意することが重要です。一般に、同じプログラム内にワイド出力ストリームとナロー出力ストリームを混在させることはお勧めできません。予期しない動作や未定義の結果が生じる可能性があります。免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3