ワイド文字の正確な性質は、(意図的に) 実装定義のままです。
彼らが最初に の概念を発明したときwchar_t
、ISO 10646 と Unicode はまだ互いに競合していました (現在ではほとんどが協力しています)。国際文字がどちらか一方 (またはまったく別のもの) になると宣言しようとするのではなく、選択した国際文字セットをサポートするために実装で定義できる型 (およびいくつかの関数) を提供するだけでした。
さまざまな実装により、バリエーションの可能性が発揮されています。たとえば、Windows で Microsoft のコンパイラを使用する場合、wchar_t
は UTF-16 Unicode を保持する 16 ビット型になります (当初は UCS-2 Unicode を保持していましたが、現在は公式に廃止されています)。
Linux では、wchar_t
多くの場合、UCS-4/UTF-32 でエンコードされた Unicode を保持する 32 ビット タイプになります。少なくとも他のいくつかのオペレーティング システムへの gcc の移植は同じことを行いますが、常にそうであることを確認しようとしたことはありません。
ただし、その保証はありません。少なくとも理論的には、Linux での実装では 16 ビットを使用するか、Windows での実装では 32 ビットを使用するか、64 ビットの使用を決定することができます (ただし、実際にそれを見ると少し驚かれることでしょう)。
いずれにせよ、物事がどのように機能するかについての一般的な考えは、wchar_t
コードポイントを表すには単一で十分であるということです。I/O の場合、データは外部表現 (それが何であれ) からwchar_t
s に変換されることを意図しています。次に、出力中に、選択したエンコーディングに再び変換されます (これは、読み取ったエンコーディングとはまったく異なる場合があります)。