😸

エスケーーーーーーーープ🌈

2024/11/14に公開

たまに以下のようなエスケープ文字がたくさん必要な文字列を書いたりしませんか?

std::string json = "{\"user_id\": 123, \"name\": \"Alice\"}";

1つずつエスケープすると、やはり読みづらくて、間違いやすいと思います。

C++11からは、R"()で囲めば、エスケープ文字は不要になります。

std::string json = R"({"user_id": 123, "name": "Alice"})";

この機能を「生文字列リテラル(Raw string literals)」と言います。

ちなみに、生文字列リテラルがどこからどこまで続いているのかが分かりづらい場合は、以下のように R" と括弧の間にどの文字列を入れてもいいです。

std::string json = R"escape({"user_id": 123, "name": "Alice"})escape";

当然ですが、\nのような特殊文字もそのまま出力されます。

例えば、

std::cout << "one\ntwo\nthree\n" << std::endl;

の出力は以下になりますが、

one
two
three

生文字列リテラルを使うと、

std::cout << R"(one\ntwo\nthree\n)" << std::endl;

以下の出力になります。

one\ntwo\nthree\n

是非使ってみてください。


|cpp記事一覧へのリンク|

Discussion