使用';编写原始字符串的正确格式是什么$';在C++;? 我正在学习C++中的原始字符串。根据该站点上的定义,原始字符串应以R”序列(开头,以序列结尾,其中序列可以是任何字符序列
该网站的一个示例如下:使用';编写原始字符串的正确格式是什么$';在C++;? 我正在学习C++中的原始字符串。根据该站点上的定义,原始字符串应以R”序列(开头,以序列结尾,其中序列可以是任何字符序列,c++,string,C++,String,该网站的一个示例如下: R“&%$(带\反斜杠的字符串)&%$” 然而,当我试图编译包含上述原始字符串的代码时,我得到了一个编译错误 test.cpp:5:28: error: invalid character '$' in raw string delimiter 5 | std::string str = R"&%$(string with \backslash)&%$"; | ^
R“&%$(带\反斜杠的字符串)&%$”
然而,当我试图编译包含上述原始字符串的代码时,我得到了一个编译错误
test.cpp:5:28: error: invalid character '$' in raw string delimiter
5 | std::string str = R"&%$(string with \backslash)&%$";
| ^
test.cpp:5:23: error: stray 'R' in program
我在Windows和Linux上使用g++和clang++进行了尝试。它们都不起作用。只需删除
$
,如下所示:
string string3 = R"&%(string with \backslash)&%";
$
给出错误,因为基本源字符集没有注释中所述的$
参考:有关基本源字符集,请参阅:该集不包含
$
字符。有关原始字符串文字中允许的前缀字符,请参见:“/…/基本源字符集的任何成员,但空格、左括号(
、右括号)
、反斜杠\
,以及表示水平制表符、垂直制表符、换行符和换行符的控制字符除外。”(强调矿山)。来自:
分隔符:由除括号、反斜杠和空格以外的任何源字符组成的字符序列(可以为空,最多16个字符)
注意这里的“任意源字符”部分
让我们看看标准是怎么说的:
来自[gram.lex]:
原始字符串:“d-char-sequenceopt(r-char-sequenceopt)d-char-sequenceopt” d-字符序列:
d-char
d-char序列d-char d-char:
基本源字符集的任何成员,空格、左括号
(
、右括号)
、反斜杠\
,以及表示水平制表符、垂直制表符、换行符和换行符的控制字符除外
那么,基本的源字符集是什么?来自[lex.charset]:
基本源字符集由96个字符组成:空格字符、代表水平制表符、垂直制表符、换行符和新行的控制字符,以及以下91个图形字符:
a b c d e f g i j k l m n o p q r s t v w x y z a b c d e g i j l m n o p q r s t v w x y z 0 1 2 3 4 5 6 7 8 9{}(<>%:;.?*+-/^&| ~!=,\“”
…不包括
$
;因此结论是美元符号$
不能是分隔符序列的一部分。引用:“由任何源字符组成的字符序列,但不包括圆括号、反斜杠和空格”(强调部分)但是,它不包含<代码> $> /Cux>字符,这就是为什么.@ DeSrErjm可能是因为<代码> $/COD>不用于任何语言特征中。我认为,基本集需要能够表示关键字、数字、运算符和其他内置C++语言特征。我们只是“为了好玩”;)“这是网站的一个例子“cplusplus.com再次罢工。最好假装这个网站不存在。我误解了哪里不能使用$
。我现在明白了,这是有道理的。@NicolBolas-如果谷歌在搜索结果中不总是把cplusplus.com放在cppreference.com之上就好了…@AntoninGAVREL也许回到了以前,键盘的布局/编码没有$
符号?我不太确定。@AntoninGAVREL:有什么需要解决的?只是不要在这里使用它。没有特别的理由。@drescherjm它没有从文本体中排除$
,只排除分隔符。几乎总是可以从88^16
组合中找到一个非常好的分隔符。我现在明白了,谢谢。简而言之:使用cppreference.com,而不是cplusplus.com。后者往往会有更多类似的不准确之处,浪费的时间会越来越多。