C ++ 11 + = оператор не работает, когда RHS имеет более одной строки или символа - PullRequest
0 голосов
/ 28 октября 2019

Я использую c++11. Когда я использую оператор += для объединения строк или символов, он не работает, однако = работает.

например, я использовал все нижеприведенные тестовые случаи независимо, т.е.

    string s="abdddddd";
    string ss="";
    ss+=s[0];//working
    ss+=s[0]+s[1]; //not working     output: Ã
    ss+="hi"+s[2];  //not working      no output
    ss+='d'+'c';  //not working      output: З
    ss+="hi"+"string"; //not working  error: invalid operands of types ‘const char [3]’ and ‘const char [7]’ to binary ‘operator+’

    string another="this";
    ss+=another+'b'; //working
    ss+="hi"+another;//working
    ss+=("hi"+s[3]); //not working
    ss=ss+"hi"+s[3]; //working
    ss=ss+"hi"+"this"; //working

Также добавление скобок не работает. Итак, я хочу знать, почему он не работает со строками, он работает с добавлением целых чисел.

1 Ответ

5 голосов
/ 28 октября 2019

Ваша проблема не +=, а +.

Например, в строке ss+=s[0]+s[1];, s[0] и s[1] имеют тип char. Добавление их добавит их целочисленные представления (коды ASCII) и объединит символ, который эта сумма представляет для ss.

Вы видите то же самое хэппи в ss+='d'+'c';, где вы явно даёте char литералы.

Используйте + только для объединения std::string с std::string или одного std::string с символом или строковым литералом. Вы не можете объединить два строковых литерала или два символа или строковый литерал с символом. (Во всех этих случаях + имеет семантику, отличную от конкатенации строк, или даже не имеет допустимого синтаксиса.)

...