如果不是有群友提问,'?'和'\?'有啥区别,我相信我也不会想起个这么东西
参加下面这段代码:
#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