根据C++'03标准2.3/1:
在进行任何其他处理之前,每个出现的以下三个字符序列之一("三字符序列")被表1中指示的单个字符替换.
Run Code Online (Sandbox Code Playgroud)---------------------------------------------------------------------------- | trigraph | replacement | trigraph | replacement | trigraph | replacement | ---------------------------------------------------------------------------- | ??= | # | ??( | [ | ??< | { | | ??/ | \ | ??) | ] | ??> | } | | ??’ | ˆ | ??! | | | ??- | ˜ | ----------------------------------------------------------------------------
在现实生活中,这意味着代码printf( "What??!\n" );将导致打印,What|因为??!是一个被|字符替换的三字符序列.
我的问题是使用三字母的目的是什么?使用三字母有什么实际优势吗?
UPD:在答案中提到一些欧洲键盘没有所有标点字符,所以非美国程序员必须在日常生活中使用三字母组合?
UPD2:Visual Studio 2010默认情况下关闭了三字母支持.
今天我发现了奇怪的语法
int _$[:>=<%-!.0,};
Run Code Online (Sandbox Code Playgroud)
在一些旧代码中,但实际上代码没有被注释.似乎没有关于此行的编译错误的报告.我单独测试它也可以编译:
int main(){
int _$[:>=<%-!.0,};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么要编译?