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*
の整数を参照するのは何ですか?i
char *
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"
?
洞察をお寄せいただきありがとうございます。