如果不是有群友提问,'?'和'\?'有啥区别,我相信我也不会想起个这么东西
参加下面这段代码:
#include<iostream> int main() { auto c = '\?'; auto cc = '?'; std::cout.put(c); std::cout.put(cc); }
c和cc的打印结果是一样的,原因是什么?
问号转义序列 \? 用于阻止在字符串字面量内转译三标符:如 "??/" 的字符串被编译成 "\",但如果在 "?\?/" 中转义第二个问号,那么它会变成 "??/"。由于三标符已从 C++ 移除,不再需要使用问号转义序列。它因为需要与 C++14 (及之前标准版本)及 C 的兼容而保留。 (C++17 起)
三标符 (C++17 中移除)
下列三字符组(三标符,trigraph)在辨识注释和字符串字面量之前被分析,而三标符的每次出现都会被替换成对应的首选字符:
首选 三标符 {
??<
} ??>
[
??(
]
??)
#
??=
\
??/
^
??'
|
??!
~
??-
因为三标符的处理非常早,所以像 // Will the next line be executed?????/ 这样的注释实际上会注释掉下一行,而如 "Enter date ??/??/??" 这样的字符串字面量将被分析为 "Enter date \\??"。
就是这么的简单,说法源自文档转义序列 - cppreference.com
10-07
10万+
