C++中u8R“delim(SomeTextInHere)delim”是啥意思?

Posted

技术标签:

【中文标题】C++中u8R“delim(SomeTextInHere)delim”是啥意思?【英文标题】:What is the meaning of u8R"delim(SomeTextInHere)delim" in C++?C++中u8R“delim(SomeTextInHere)delim”是什么意思? 【发布时间】:2011-11-04 04:41:35 【问题描述】:

好的,这是我以前从未见过的东西。在野外发现了以下 sn-p 代码(尽管我在解释,因为我无权访问原始代码):

char str[] = u8R"delim(SomeTextInHere)delim";

谁能告诉我这意味着什么以及在 C 中的等价物是什么?

【问题讨论】:

如果有人在野外这样写,他们疯了。 【参考方案1】:

我不知道如何将它翻译成 C 先生,但这是在一个示例中抛出了几乎所有与文字相关的新内容。

u8: utf-8 string literal.
R: Raw string literal (no escape characters)
"delim(" ... ")delim": The prefix and suffix of the raw string literals. 
                       They are used as delimiters, and you can write your own.

【讨论】:

我的父亲被称为“先生”,你可以叫我pax :-)【参考方案2】:

到目前为止,C 中还没有等价物。这是一个 C++11 特性,它结合了两件事。

u8 前缀表示字符串将以 UTF-8 编码。 R 前缀意味着它是一个原始字符串文字。组合它们意味着原始字符串将被 UTF-8 编码。

原始字符串是一种绕过正则表达式等所需的所有转义的方法。通常,在正则表达式中,您必须使用很多“\”字符。但那是 C/C++ 转义字符,因此在字符串文字中,您必须改用“\”。原始字符串文字允许您避免这种情况。在原始字符串中,没有转义字符。

原始字符串文字的工作方式如下。 R 前缀后跟 " 照常。但是直到第一个 ( 字符之前的字符都被认为是原始字符串分隔符的一部分。因此,如果您以R"foo( 开始一个原始字符串,则该字符串将一直持续到解析器看到)foo"

这样,您可以使用"\ 以及几乎任何其他字符,只要您选择分隔符即可。分隔符也可以为空,所以R"(some stuff)" 等价于"some stuff"。它在看到)" 时结束。

【讨论】:

以上是关于C++中u8R“delim(SomeTextInHere)delim”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

USART1_IRQHandler 函数的理解

在 C++ 中制作“对象”| C++ | JS [关闭]

在 C++ 中使用 C# 接口或在 C# 中使用 C++ 接口

C++ 如何在 C++ 中覆盖文本文件中的数据?

C++ 如何在 C++ 中使用 dlopen()?

我们啥时候需要在纯 C++ 程序中使用结构?纯 C++ 程序是不是需要结构? [复制]