C++ などで 2 つの文字列リテラルを追加できない理由、および operator+ が整数への文字列リテラルの追加をサポートする理由について、私は多数の投稿を読みました。
ただし、次のコードのコンパイラ エラーを理解しようとしています。
string str1, str2, str3;
int i = 10;
str1 = "Hello " + i;
str2 = i + "Mars";
str3 = "Hello " + i + "Mars";
との初期化は正常str1にstr2動作しますが、 の構築でstr3次のエラーが発生します。
example.cpp: 関数内
int main():
example.cpp:20:27: エラー: 型const char*とconst char [5]バイナリのオペランドが無効ですoperator+
Q1: エラー メッセージで、 をconst char [5]参照していると理解しました"Mars"。に変換した後const char*の整数を参照するのは何ですか?ichar *
Q2:operator+左から右への結合性があります。 の構成は次のstr3ように記述できると推測しています。
str3 = ("Hello " + i) + "Mars";
("Hello " + i)に評価されchar *ますか?
Q3: 次のコードでは:
str5 = string("foo ") + "bar ";
str6 = string("foo ") + "bar " + i;
の設定は正常にstr5コンパイルされますが、大量str6のエラー メッセージ (ページと半分) が生成されます。の結果は何string("foo ") + "bar "ですか"string"?
洞察をお寄せいただきありがとうございます。