为什么必须在C ++中转义字符串文字中的反斜杠?

时间:2012-12-21 08:34:23

标签: php c++ escaping tcl

我想为两种语言声明相同的正则表达式模式。对于TCL,我这样做

set pattern "\d\s\S" 

但对于C ++,我必须以相同的模式执行此操作

boost::regex pattern("\\d\\s\\S");

否则C ++编译器会告诉我们以下内容:

warning C4129: 'd' : unrecognized character escape sequence

那么为什么TCL不试图找到\ d \ s \ S转义符号而只是忽略\ - s但是C ++尝试并糟透了?

P.S。我记得PHP就像TCL一样。

2 个答案:

答案 0 :(得分:4)

这就是C ++和PHP的不同之处;在PHP中,反斜杠后面的字符与一小组特殊字符匹配(我相信"rnvtx")。如果匹配失败,它将继续而不改变其含义。

然而,C ++期望该字符在那个小集合中(我认为该集合是更大的btw)但是如果匹配失败,你将看到错误。

答案 1 :(得分:1)

C ++具有Character Escape Sequences的概念。转义序列采用\c形式('c'是一个字符),用于定义字符串文字中的某些特殊字符,因此,反斜杠本身也必须进行转义以表示特殊字符没有暗示。