ワイド文字列

ワイド文字列について理解していなかったので個人的なまとめ。

//wchar_t   wstr[] = "日本語";  // const char [11]' から 'wchar_t []' に変換出来ない
wchar_t wstr[] = L"日本語";     // ワイド文字列の先頭に L をつける

std::wcout.imbue(std::locale("japanese"));
std::wcout << wstr[0] << std::endl;
std::wcout << wstr[1] << std::endl;
std::wcout << wstr[2] << std::endl;

assert(wstr[0] == L'日');
assert(wstr[1] == L'本');
assert(wstr[2] == L'語');
wstr[2] = L'人';
assert(wstr[2] == L'人');

assert('a' == L'a');

assert(std::string("日本語").size() == 6);
assert(std::wstring(L"日本語").size() == 3);
assert(std::wstring(L"abc").size() == 3);

for( const char* str = "日本語" ; *str != 0 ; str++){
	std::cout << (*str) << std::endl;    // 日本語で表示できない
}
for( const wchar_t* str = L"日本語" ; *str != 0 ; str++){
	std::wcout << (*str) << std::endl;
}

改めて見てみると扱いが全然違うことが分かります。
これから意識してみよう。
[参照]
http://hw001.gate01.com/eggplant/tcf/cpp/wchar_t_trap.html