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”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章