namespace std {
typedef implementation-defined mbstate_t; // C++98
using mbstate_t = implementation-defined; // C++17
}
概要
マルチバイト文字とワイド文字の変換における、変換状態を保持する型。
シフト状態をもつエンコーディング(ISO-2022-JPなど)や、UTF-8のように1文字が複数バイトにわたるエンコーディングでは、変換の途中経過を保持する必要がある。この型のオブジェクトは、そのような変換状態を表す。
- 配列以外のトリビアル型である
- 値初期化 (
std::mbstate_t state{};) したオブジェクトは、初期変換状態を表す - 変換関数は、この型のオブジェクトを参照として受け取り、変換のたびに更新する
備考
- この型は
<cuchar>・<cstdlib>・<cwchar>で定義される - 変換状態が初期状態であるかは
mbsinit()で判定できる - ひとつの
mbstate_tオブジェクトを、複数の変換の流れで共有してはならない
例
#include <iostream>
#include <cwchar>
int main()
{
// 値初期化により、初期変換状態のオブジェクトを作る
std::mbstate_t state{};
std::cout << (std::mbsinit(&state) != 0) << std::endl;
// マルチバイト文字列をワイド文字へ1文字ずつ変換する
const char* input = "ab";
wchar_t wc = 0;
std::size_t n = std::mbrtowc(&wc, input, 2, &state);
std::cout << n << ' ' << static_cast<char>(wc) << std::endl;
}
出力
1
1 a