C/C++三标符

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

参加下面这段代码:

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

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值