5

文字列に 2 文字を追加しようとしましたが、文字列が変更されていないようです。

void fun()
{
    string str;
    str += 'a' + 'b';

    cout << str;
}

STL のソース コードを調べたところ、 の実装が見つかりましたがoperator+=、その理由はまだわかりません。

basic_string&
operator+=(_CharT __c)
{
    this->push_back(__c);
    return *this;
}
4

4 に答える 4

7

追加'a' + 'b'すると、2 つの文字が追加されて別の文字が形成されます。次に、それを で文字列に追加します+=

このコードはあなたが望むことをします:

std::string str;
( str += 'a' ) += 'b';

std::cout << str;
于 2013-07-22T09:19:01.677 に答える
3
于 2013-07-22T09:28:18.060 に答える
2

str += 'a' + 'b'; これを実行すると、単一の演算子「+」が複合演算子「+=」の前にあるため、最初に 2 つの char 記号の合計が計算され、合計結果は 195 になります (「a」の ASCII 値は 97、「b」はは 98 です)、クラス文字列のオーバーロード演算子 '+' を実行します。関数をトレースすると、char の引数のみを受け入れることがわかるため、値が -61 (195-256==-61) の char に変換されます。しかし、それは印刷されていないシンボルなので、結果は最後まで0です。もちろん、自分のデザインで新しい弦を手に入れることはできません。

次のように再コーディングできます。

 string str;
 str += 'a';
 str += 'b';
于 2013-07-22T09:30:06.963 に答える
2

ここでは文字列を使用していません。明示的なキャストを使用してください。または、文字列変数として宣言します。

例えば:

void fun()
{
    string str, str1 = 'a', str2 ='b';
    str += str1 + str2

    cout << str;
}

また

void fun()
{
    string str;
    str += string("a") + 'b';

    cout << str;
}
于 2013-07-22T09:20:01.707 に答える