首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >什么是原始字符串?

什么是原始字符串?
EN

Stack Overflow用户
提问于 2019-06-22 04:26:22
回答 3查看 24.2K关注 0票数 25

我在C++17 draft n4713中偶然发现了以下代码片段:

代码语言:javascript
代码运行次数:0
运行
复制
#define R "x"
const char* s = R"y"; // ill-formed raw string, not "x" "y"

什么是“原始字符串”?是干什么的呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-22 04:31:05

原始字符串文字是字符串文字,旨在更容易地包括嵌套字符,如引号和反斜杠,这些字符通常具有作为分隔符和转义序列开始的含义。比如说,它们对于像HTML这样的文本编码很有用。例如,对比度

代码语言:javascript
代码运行次数:0
运行
复制
"<a href=\"file\">C:\\Program Files\\</a>"

,它是一个常规的字符串文字,带有

代码语言:javascript
代码运行次数:0
运行
复制
R"(<a href="file">C:\Program Files\</a>)"

它是一个原始的字符串文字。在这里,除了引号之外,使用括号还允许C++将嵌套引号与分隔字符串本身的引号区分开来。

票数 35
EN

Stack Overflow用户

发布于 2019-06-22 04:32:29

基本上,raw string文本是不处理C++的转义字符(如\n\t\" )的字符串。以R"(开头,以)"结尾的原始字符串文字,在C++11中引入

前缀(可选)R“分隔符( raw_characters )分隔符”

前缀- L、u8、u、U中的一个

多亏了@Remy Lebeaudelimiter是可选的,通常会被省略,但在某些情况下实际上需要它,特别是当字符串内容中包含字符序列)"时,例如:R"(...)"...)",因此您需要一个分隔符来避免错误,例如:R"x(...)"...)x"

请看示例:

代码语言:javascript
代码运行次数:0
运行
复制
#include <iostream>
#include <string> 
using namespace std;

int main()
{
    string normal_str="First line.\nSecond line.\nEnd of message.\n";
    string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";
    cout<<normal_str<<endl;
    cout<<raw_str<<endl;
    return 0;
}

输出:

第一行。

第二行。

消息结束。

第一行。\n第二行。\n消息结束。\n

票数 24
EN

Stack Overflow用户

发布于 2019-06-22 04:39:19

原始字符串文字。用于避免对任何字符进行转义。分隔符之间的任何内容都将成为字符串的一部分。前缀,如果存在,具有与上述相同的含义。

C++Reference:string literal

原始字符串的定义如下:

代码语言:javascript
代码运行次数:0
运行
复制
string raw_str=R"(First line.\nSecond line.\nEnd of message.\n)";

不同之处在于,原始字符串忽略(转义)所有特殊字符,如\n ant \t,并像普通文本一样威胁它们。

因此,上面的行将只有一行,其中包含3个实际的\n行,而不是3个单独的行。

您需要删除define行,并在字符串两边添加圆括号,以将其视为原始字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56710024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档