0

私はこのコードが奇妙に動作しています:

int main() {

    string a = "TRY";
    string b = "THIS";

    a += b[0] + '!';      //This outputs "TRYu"?
    //a = a + b[0] + '!'; //This outputs "TRYT!" as expected.

    cout << a;

}

上記の 2 つのステートメントは同じであってはなりませんか?

4

4 に答える 4

3

いいえ、最初の例は等しくありません

a = a + b[0] + '!'

しかし、むしろ

a = a + ( b[0] + '!' )

char は数値であることはわかっています。b[0]とは両方とも'!'文字であるb[0] + '!'ため、連結ではなく追加 ( b[0] + 33、基本的に) が得られます。次に、code の ASCII 文字を文字列に追加しようとしますb[0] + 33b[0]'T'(ASCII 84) であるため、ASCII コード 117 : の文字になります'u'

コードを修正して連結するには、'!'に置き換える必要があります。std::string("!")

于 2013-01-19T01:49:43.253 に答える
2

いいえ、char + char = char;

std::string + char = std::string;

あなたの2番目の例では。

a = a + b[0] + '!';

だろう

string = ((string + char) + char)

std::stringオブジェクトに常に何かを追加している場所

于 2013-01-19T01:49:03.863 に答える
0

b[0] は単なる文字です。つまり、b[0] + '1' は char + char であり、それはダメです。組み込み型には、文字列のように複雑なことは何もありません。値を追加するだけです。;) 2 番目の (実際の) 例では、b[0] が a に追加され、次に '!' が追加されます。それに追加されるため、常に文字列演算子が使用されます。

于 2013-01-19T01:49:54.290 に答える