std::string
を行うとほとんど同等だがタイプconst char *
の右側の引数を取るメンバ関数operator +
を持っています。また、オペレータの左側にconst char *
を置くことを可能にするグローバルに定義されたoperator +
があります。
// std::string::operator + (const char *)
std::string a;
a = "b";
// global operator + (std::string, const char *)
std::string a;
a = (std::string)"b" + "c";
// global operator + (const char *, std::string)
std::string a;
a = "b" + (std::string)"c";
文字列リテラルは、タイプconst char *
であるため、引数は型キャストstd::string
にでなければならない理由。 "a" + "b"
の問題は、コンパイラが代入文にタイプstd::string
のオブジェクトを持たないため、ポインタを一緒に追加しようとしていることです。これを避けるには、char *
用語の左側または右側にタイプstd::string
の用語が必要です。
あなたはstd :: string s =(std :: string)( "a" + "b" + "c")を意味すると思います。 ? – BlackBear
@BlackBearそれはあなたがお互いにポインタを追加することはできないので、コンパイルさえできません。 – Timbo
@BlackBear:それは失敗します。彼のコードは文字列オブジェクトに "a"をキャストして連結します。あなたは2つのポインタを追加しようとしますが、失敗するでしょう。 –