23904

[code]

    #include <iostream>
    #include <locale>
    int main()
    {
        std::setlocale(LC_CTYPE, "");
        std::wcout << L"あいうえお" << std::endl;
    }
    
[/code]

とすると、`あいうえお` と出力されます。

[code]

    #include <iostream>
    #include <locale>
    int main()
    {
        std::setlocale(LC_CTYPE, "");
        std::cout << "あいうえお" << std::endl;
    }
    
[/code]

とすると、やはり`あいうえお` と出力されます。  
ところが、

[code]

    #include <iostream>
    #include <locale>
    int main()
    {
        std::setlocale(LC_CTYPE, "");
        std::cout << "あいうえお" << std::endl;
        std::wcout << L"あいうえお" << std::endl;
    }
    
[/code]

とすると

`あいうえお`  
`あいうえお`

を期待していましたが

`あいうえお`  
`BDFHJ`

と出力されます。

[code]

        std::wcout << L"あいうえお" << std::endl;
    
[/code]

が正しく表示さなく、`BDFHJ`と出力されます。

そもそもstd::coutとstd::wcoutを混在させることはまれなので、さほど大きな問題とはかんじていないのですが、不思議な結果に驚いています。

**質問**  
これは仕様通りの結果なのでしょうか？

環境は、  
Ubuntu14.04(x86_64)  
LANG="ja_JP.UTF-8"

g++ version 4.8.5  
clang++ version 3.4  
で結果は同じでした。


CC BY-SA 3.0
2016-04-11T01:34:52.210
23903
2016-04-11T02:10:54.143
7844
question
c++
std::coutとstd::wcoutを混在させると正しく出力されない


[setlocale使用時の挙動について](https://ja.stackoverflow.com/questions/8507/)  
と同じ原因によります。

[c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") 言語仕様書 ISO/IEC 14882:1998
によれば

27.3.1 Narrow stream object の 3  
`cout` は `stdout` に結び付けられる  
27.3.2 Wide stream object の 3  
`wcout` は `stdout` に結び付けられる

ので、あとはリンク先の情報にあるとおりでしょう。


CC BY-SA 3.0
2016-04-11T02:02:15.777
23904
2016-04-11T02:10:54.143
2017-04-13T12:52:39.113
-1
8589
23903
answer