Última atualização:2026-10-12
Trigraphs em C++¶
C++那些事: a remoção dos trigraphs¶
Antes do C++17, os trigraphs eram um recurso para escrever programas em códigos de caracteres reduzidos como o ISO/IEC 646, introduzido no C89. O ISO/IEC 646 não possui os seguintes caracteres usados em C e, portanto, ?? deve ser usado para escapá-los:
| Conteúdo do trigraph | Conteúdo substituído |
|---|---|
??= |
# |
??( |
[ |
??) |
] |
??< |
{ |
??> |
} |
??/ |
\ |
??! |
| |
??- |
~ |
??' |
^ |
\? é escapado para evitar a substituição pela tabela de trigraphs.
No C++17 os trigraphs foram removidos; ??= e afins não são mais substituídos.
Exemplo¶
Antes do C++17:
Saída:
No C++17 e depois:
Hoje em dia, provavelmente porque codificações de caracteres como o Unicode já estão amplamente difundidas, os trigraphs não são mais necessários, e compiladores como o gcc os desativam por padrão.
Tópicos relacionados¶
- C++ evitar o construtor padrão | C++那些事
- Idiom de lista de inicialização de classes em C++ | C++那些事
- C++: templates de classe em vez de templates de função | C++那些事
- Idiom copy-and-swap em C++ | C++那些事
- Injeção de dependência em C++ | C++那些事
- C++ enum class enumerações fortemente tipadas | C++那些事
- C++ Header-Only versus separação de implementação | C++那些事
- Idiom de avaliação preguiçosa em C++ | C++那些事
- Idiom de consulta em tabela em C++ | C++那些事
- Ponteiros para membros e type info em C++ | C++那些事