Последнее обновление: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++那些事
- Идиома copy-and-swap в C++ | C++那些事
- Внедрение зависимостей в C++ | C++那些事
- Сильнотипизированные перечисления enum class в C++ | C++那些事
- Header-Only в C++ против разделения реализации | C++那些事
- Идиома ленивых вычислений в C++ | C++那些事
- Идиома таблиц поиска в C++ | C++那些事
- Указатели на члены и информация о типах в C++ | C++那些事