C++17 之前,Trigraph 是用 ISO/IEC 646 等小字符代码编写程序的功能,在 C89 中引入。ISO/IEC 646 缺少 C 中使用的以下字符,因此??
请使用以下字符进行转义:
注:本节代码已放星球。
三字母内容 | 替换的内容 |
---|---|
??= | # |
??( | [ |
??) | ] |
??< | { |
??> | } |
??/ | \ |
??! | ` |
??- | ~ |
??' | ^ |
\?
它被转义以防止被三字母表替换。
C++17三字母被删除,??=
等不再被替换。
C++17之前:
std::cout << "??=" << std::endl;
std::cout << "??(" << std::endl;
std::cout << "?\?(" << std::endl;
输出:
#
[
??(
C++17及之后:
??=
??(
??(
现在可能由于Unicode等字符编码已经普遍存在,不再需要三字母组,而gcc等编译器默认禁用三字母组。