File tree Expand file tree Collapse file tree 1 file changed +12
-0
lines changed
Expand file tree Collapse file tree 1 file changed +12
-0
lines changed Original file line number Diff line number Diff line change @@ -18,6 +18,11 @@ namespace std {
1818
1919`n`は解析に使用する最大バイト数を指定する。
2020
21+ この関数は `std::mbstate_t` に等価な静的記憶域の内部状態を保持し、前回の `mblen` 関数呼び出しの続きとして処理を行う。
22+ 従って、この関数はスレッドセーフではない。
23+ スレッドセーフに処理する場合は、`std::mbstate_t` を受け取る [`std::mbrlen`](../cwchar/mbrlen.md.nolink) (`<cwchar>`) を使い、呼び出し元でデコード状態の記録場所 `std::mbstate_t` を用意する必要がある。
24+ 新しいコードでは、特に理由がない限り `std::mblen` ではなく `std::mbrlen` を用いるべきである。
25+
2126## 戻り値
2227- 正常に動作する場合、文字の占めるバイト数を返す。
2328- `str`が`nullptr`の時、内部状態を初期化する。現在のエンコーディングが状態を持つ場合は非ゼロの値を返し、それ以外の場合は`0`を返す。
@@ -79,8 +84,15 @@ int main() {
7984}
8085```
8186
87+ 注意: この例は飽くまで `std::mblen` を用いて文字数を数える関数の例であるが、実用上は `std::mbrlen` を用いた実装にするのが安全である。
88+ 上の関数 `count_chars_mblen` はスレッドーセーフでない他、呼び出し元でも `std::mblen` を使っている場合にその振る舞いを破壊する可能性がある。
89+
8290#### 出力例
8391```
8492文字列: こんにちは世界
8593文字数: 7
8694```
95+
96+ ## 関連項目
97+
98+ - [`mbrlen`](../cwchar/mbrlen.md.nolink): `std::mbstate_t` を受け取るスレッドセーフなバージョン
You can’t perform that action at this time.
0 commit comments