0;}localeを入れた場合の結果localeを入れなかった場合の結果なぜUnicodeなのにsetlocaleしなければ文字が出力出来ないか。それは、コマンドプロンプトがShift-JISしか表示出来ないため、wcoutはShift-JISで文字列を出力せねばならず、wcout自身は自分がどんな環境で動いているか関知していないので、localeでShift-JIS環境だと教えてあげる必要があるという理屈からだ。自分が作ったアプリケーション内で、どのように文字列を処理しようがそれは作った者の自由だ。別にshift-jisやunicodeである必要はない。必要があれば自分定義した文字コードで書いたっていい(もの凄い労力だろうが)。それを出力するなら、出力先の仕様に合わせる必要がある。出力先がどんな文字コードに対応しているかを教えるのがlocaleの役目となる。0;}ファイル出力に関しても同様で、Lをつけてワイド文字指定しても、wofstreamが自動的にShift-JISへ変換して出力する。