C/C++三标符

如果不是有群友提问,'?'和'\?'有啥区别,我相信我也不会想起个这么东西

参加下面这段代码:

#include
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

你可能感兴趣的:(c++,c语言)