在C ++中,u8R“delim(SomeTextInHere)delim”是什么意思?

时间:2011-11-04 04:41:35

标签: c++ string c++11

是的,这是我以前从未见过的东西。在野外发现了以下代码片段(虽然我正在解释,因为我无法访问原始代码):

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

任何人都可以告诉我这意味着什么以及C中的等价物是什么?

2 个答案:

答案 0 :(得分:5)

我不知道如何将它翻译成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.

答案 1 :(得分:2)

C中没有等效物。这是一个结合了两件事的C ++ 11特性。

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

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

原始字符串文字的工作方式如下。正常后跟R前缀后跟"。但是直到第一个(字符的字符都被视为原始字符串的分隔符的一部分。因此,如果您使用R"foo(启动原始字符串,字符串将继续,直到解析器看到)foo"

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