3

以下があるとしましょう:

\u0052\
\u0022\u0058(Please no?)\u0058\u0022

ユニバーサル キャラクタ名を変換し、ライン スプライシングを実行すると、結果は次のようになります。

R"X(Please no?)X"

これは有効な生の文字列です。2.5.3 によると、「生の文字列の最初と最後の二重引用符の間で、フェーズ 1 と 2 で実行された変換は元に戻されます」:

R"\u0058(Please no?)\u0058"

これはまだ有効な生の文字列です。

これは本当にプロセスがどのように機能するのか? そうでない場合、上記を有効な生の文字列にするためにどのくらい変更する必要がありますか?

4

1 に答える 1

1

いいえ、それはプロセスの仕組みではありません。

セクション 2.3、パラグラフ 2:

... 文字または文字列リテラルのc-char-sequences-char-sequence、またはr-char-sequenceの外にあるユニバーサル文字名の 16 進値が制御文字に対応する場合 ... または基本ソース文字セットの文字である場合、プログラムの形式が正しくありません。

したがって、プログラムの形式が正しくありません。一部のコンパイラは、指定した方法でユニバーサル文字名を解決することを選択する場合がありますが、それは非標準の拡張です。

それ以外は、あなたはそれを正しく持っています。あなたが書いた場合:

R\
"\u0058(Please no?)\u0058"

\u0058元に戻されます。

于 2013-02-23T01:09:30.503 に答える