16

とにかくPHPのようなことをすることはありますか

print << END
yadayadayada
END;

C ++で?(複数行、エスケープされていない、切り取りと貼り付けが簡単なストリーム挿入)

4

8 に答える 8

39

C++11 には生の文字列リテラルがあります:

// this doesn't have '\n', but '\\' and 'n'
R"(yada"yadayada\n)" 

これらの括弧が必要な場合は、終了トークンに必要なものを使用してそれを行うこともできます。

// the following will be "(yada)(yada)(yada)"
R"END((yada)(yada)(yada))END" 

埋め込まれた改行でも機能します。

// the following will be "\n(yada)\n(yada)\n(yada)\n"
R"END(
(yada)
(yada)
(yada)
)END" 
于 2009-10-10T22:27:36.487 に答える
13

この回答は、最新の C++ では古くなっています。最新の方法については、 sbi の回答を参照してください。

これはあなたができる最善のことです:

std::cout <<
    "This is a\n"
    "multiline\n"
    "string.\n";

適切なヒアドキュメントほど便利ではありませんが、ひどいものではありません。

于 2009-10-10T22:03:50.703 に答える
7

C++ では、通常、大量のデータをソース コードに入れることはコード スタイルとは見なされないため、それを行うための派手な言語の方法はありません。

通常、テキストを外部ファイル (テキスト ファイルなど) に配置する方がより柔軟です。その後、コンパイルされた実行可能ファイルにバインドされません。

テキストを実行可能ファイルにバインドしたい場合は、(プラットフォームによって異なりますが) 多くの場合、何らかの形式のリソースサポート、または「incbin」スタイル ディレクティブを含むアセンブラを使用して、次のテキストを含むデータ領域に名前を付けます。あなたがしたい。

または、外部ユーティリティ ( などxxd -i) を使用して、特定の入力ファイルから名前付きの C スタイル配列をコンパイルすることもできます。生成されたファイルは、残りのソース コードと一緒にコンパイルできます。

于 2009-10-10T22:12:13.963 に答える
5

はい。 http://en.cppreference.com/w/cpp/language/string_literal

const char* s1 = R"foo(
Hello
World
)foo";
//same as
const char* s2 = "\nHello\nWorld\n";

それがベスト プラクティスであるかどうかにかかわらず、C++11 はまさにあなたが望むことをうまく実行します。

于 2015-07-02T19:48:36.787 に答える
1

次のようにできます。

std::cout << "First line\n"
"second line\n"
"third line\n" ;

そして、それが C++ でできる最善のことです。

于 2009-10-10T22:03:31.017 に答える
0

行末のスラッシュは、次の行が文字列の続きであることを意味します。これにより、他の提案よりも好む場合と好まない場合がある別の構文にたどり着きます。

std::cout << "\
This is a\n\
multiline\n\
string.\
";

利点: 各行を引用符で囲む必要はありません。他のソースからテキストをインポートする場合、各行の両端ではなく片端のみを編集する必要があります (よりマクロに適しています)。先頭のスペースを含め、結果の文字列がどのように表示されるかを正確に確認できます。

欠点: 改行には \n を明示的に含める必要があり、コードをきれいにインデントする機能を失うのは好きではありません。HEREDOC 構文もこの機能の影響を受けるため、おそらく気にならないでしょう。

個人的には、これは私が好きな構文ではありません。

于 2009-10-10T23:11:06.110 に答える
0

C++ には HEREDOC のようなものはありません。

できるよ

cout << 
"yadayadayada"
"yadayadayada"
<< endl;

それはあなたが得ることができる最高のものです。ただし、\,",' などの特殊文字はエスケープする必要があります。

方法は、テキストをリソースとして実行可能ファイルに含めるか、外部ファイルからロードすることです。

于 2009-10-10T22:05:42.610 に答える
-2

私があなたを正しく理解していれば、あなたはこれを望んでいると思います:

#include <iostream>
...
std::cout << std::endl << "yadayadayada" << std::endl;
于 2009-10-10T22:02:14.920 に答える