84

これがよくある問題であることはわかっていますが、参考文献やその他の資料を探しても、この質問に対する明確な答えが見つかりません。

次のコードを検討してください。

#include <string>

// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;

コンパイラから、 のオーバーロードされた演算子が見つからないことがわかりましたchar[dim]

文字列に + 演算子がないということですか?

しかし、いくつかの例では、このような状況があります。これがより多くの文字列を連結する正しい方法でない場合、最善の方法は何ですか?

4

4 に答える 4

154

書かれているように、あなたのコードは機能します。あなたはおそらく無関係であるが類似した何かを達成しようとしています:

std::string c = "hello" + "world";

charC ++の場合、これは2つのポインターを追加しようとしているように見えるため、これは機能しません。代わりに、リテラルの少なくとも1つをに変換する必要があります。質問にすでに投稿したことを実行するか(私が言ったように、このコード機能します)、次のようにします。char*std::string

std::string c = std::string("hello") + "world";
于 2010-11-29T14:29:21.113 に答える
46
std::string a = "Hello ";
a += "World";
于 2010-11-29T14:28:27.293 に答える
5

私はこれを行います:

std::string a("Hello ");
std::string b("World");
std::string c = a + b;

これはVS2008でコンパイルされます。

于 2010-11-29T14:28:46.343 に答える
5
std::string a = "Hello ";
std::string b = "World ";
std::string c = a;
c.append(b);
于 2010-11-29T14:29:01.557 に答える