[英]Why must backslashes in string literals be escaped in C++?
我想为两种语言声明相同的正则表达式模式。 对于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 ++尝试又糟透了?
我记得PS PHP作为TCL工作。
这就是C ++和PHP的不同之处; 在PHP中,反斜杠后面的字符与一"rnvtx"
特殊字符匹配(我相信"rnvtx"
)。 如果匹配失败,它将继续而不改变含义。
但是,C ++期望该字符在那个小集合中(我认为该集合是更大的btw)但是如果匹配失败,你将看到错误。
C ++具有Character Escape Sequences的概念。 转义序列采用形式\\c
('c'是一个字符),用于定义字符串文字中的某些特殊字符,因此,反斜杠本身也必须转义以表示特殊字符不是暗示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.