私はstd :: stringの真ん中から3つの文字を連結しています。私がcharでcharを行うと、期待される結果が得られますが、私が1つの式で行うと、私は奇妙な結果を得ます。どうして?1つの式のstd :: string連結が、charとcharとで異なる結果をもたらす理由を教えてください。
#include <string>
#include <iostream>
using namespace std;
int main()
{
string s1 = "abcdefghijklmnopq";
string s2 = "";
string s3 = "";
s3+=s1[4];
s3+=s1[5];
s3+=s1[6];
cout << s3 << endl; // Expected behaviour
s2=s1[4]+s1[5]+s1[6];
cout << s2 << endl; // ?????
}
'char's ** not **' std :: string'sを追加しています – WhiZTiM
理由を説明した回答があります。 1つの解決策は、右辺を強制的に 'std :: string'にすることです。これは変換で行うことができます:' s3 + = std :: string(s1 [4])+ s1 [5] + s1 [6 ]; '。これは、右の式が '' std :: string(s1 [4])+ s1 [5])+ s1 [6] 'と書かれているかのように、' + 'グループが左から右へのルールに依存しています。もしあなたがそれに不快なら、あなたは '' s1 [4] + std :: string(s1 [5])+ s1 [6] 'というグループ化に依存しない、やや奇妙な形式で書くことができます。 –