最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

enum
<codecvt>

# std::codecvt_mode(C++11)(C++17で非推奨)(C++26で削除)

    namespace std {
      enum codecvt_mode {
        consume_header = 4,
        generate_header = 2,
        little_endian = 1
      };
    }

## 概要

文字コード変換の設定をするための列挙型。

列挙値 | 説明
--- | ---
`consume_header` | 読み込み時に先頭のバイトオーダーマーク(BOM)を消費する
`generate_header` | 先頭にバイトオーダーマーク(BOM)を出力する
`little_endian` | リトルエンディアンで出力する（デフォルト動作はビッグエンディアン）

この型は、以下のクラステンプレートにおいて、テンプレート仮引数として使用されている。

- `codecvt_utf8`
- `codecvt_utf16`
- `codecvt_utf8_utf16`

## 非推奨・削除の詳細

Unicodeの文字コード変換を行うこれらのクラスは、不正なコードポイントに対する安全なエラー処理の方法を提供していなかったため、セキュリティ上の欠陥があった。

仕様もあいまいであったため、不正なコードポイントに対してどのように振る舞うかも不明であった。

Unicode以外のShift_JISやBig5といった文字コードの利用が急激に減少している。標準ライブラリでの現代的なUnicodeの変換機能は非常に必要とされているが、`<codecvt>`の設計はお粗末なものだった。将来より良いものを作るために、これらの機能は非推奨・削除とする。

標準ライブラリにUnicodeの文字コード変換をする代替機能はないため、他の専門特化した文字コード変換のライブラリを使用すること。

## バージョン

### 言語

- C++11

### 処理系

- Clang: 3.0 ✅
- GCC: 5.1 ✅
- ICC: ??
- Visual C++: 2010 ✅, 2012 ✅, 2013 ✅, 2015 ✅, 2017 ✅

## 参照

- P0618R0 Deprecating `<codecvt>`
- P2871R3 Remove Deprecated Unicode Conversion Facets from C++26