繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM