2011-11-04 2 views
2

これは私が以前見たことのないものです。 (私は元へのアクセスを持っていないので、私は言い換えだが)次のコードスニペットは、野生で発見された:C++のu8R "delim(SomeTextInHere)delim"の意味は何ですか?

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

誰もが、実際にこれが何を意味するのかと等価ではでどのようになるかを教えてもらえますC?

+0

誰かが野生でそれを書いた場合、彼らは狂っています。 –

答えて

2

まだCと同等のものはありません。これは、2つのことを組み合わせたC++ 11の機能です。

接頭辞u8は、文字列がUTF-8でエンコードされることを意味します。 Rという接頭辞は、それが生の文字列リテラルであることを意味します。それらを組み合わせると、生の文字列はUTF-8でエンコードされます。

生の文字列は、正規表現などに必要なすべてのエスケープ処理を回避する方法です。通常、正規表現では、多くの "\"文字を使用する必要があります。しかしそれはC/C++エスケープ文字なので、文字列リテラルでは代わりに "\"を使用する必要があります。生の文字列リテラルでは、それを避けることができます。生の文字列では、エスケープ文字はありません。

生の文字列リテラルの仕組みは次のとおりです。 Rの接頭辞の後には通常通り"が続きます。しかし、最初の(文字までの文字は、すべて生の文字列の区切り文字の一部とみなされます。したがって、生の文字列をR"foo(で始めると、パーサーが見るまで文字列は続きます()foo")。

この方法では、区切り記号を選択する限り、",\などの他の文字を使用することができます。デリミタも空にできるので、R"(some stuff)""some stuff"に相当します。それは)"を見ると終了します。

5

私はそれをC sirにどのように翻訳するのかわかりませんが、これはほとんどすべての新しいリテラル関連のものを一例で投げています。

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. 
+5

私の_father_は "サー"と呼ばれていました。 – paxdiablo

関連する問題