最終更新:2026-10-12
C++ トライグラフ¶
C++那些事 トライグラフの削除について¶
C++17 より前では、Trigraph は ISO/IEC 646 などの小さな文字コードでプログラムを書くための機能で、C89 で導入されました。 ISO/IEC 646 には C で使われる以下の文字が欠けているため、?? を使って以下の文字にエスケープします:
| トライグラフの内容 | 置き換えられる内容 |
|---|---|
??= |
# |
??( |
[ |
??) |
] |
??< |
{ |
??> |
} |
??/ |
\ |
??! |
| |
??- |
~ |
??' |
^ |
\? は、トライグラフ表によって置き換えられるのを防ぐためにエスケープされます。
C++17でトライグラフは削除され、??=などはもう置き換えられません。
例¶
C++17より前:
出力:
C++17およびそれ以降:
現在では、Unicodeなどの文字エンコーディングが普及しており、トライグラフはもはや不要であり、gccなどのコンパイラはデフォルトでトライグラフを無効にしています。
関連トピック¶
- C++ デフォルトコンストラクタの回避 | C++那些事
- C++ クラス初期化リストイディオム | C++那些事
- C++ 関数テンプレートよりクラステンプレート | C++那些事
- C++ copy-and-swap イディオム | C++那些事
- C++ 依存性注入 | C++那些事
- C++ enum class 強い型付けされた列挙 | C++那些事
- C++ Header-Only と実装分離 | C++那些事
- C++ 遅延評価イディオム | C++那些事
- C++ ルックアップテーブル法イディオム | C++那些事
- C++ メンバポインタと型情報 | C++那些事