+ = со строками в C ++ - PullRequest
       1

+ = со строками в C ++

0 голосов
/ 09 февраля 2012

Я играл со строками в C ++, и я не понимаю, почему следующее вызывает ошибку при компиляции:

string s = "hi";
s += " " + "there!";

Сообщение об ошибке:

error: invalid operands of types ‘const char [2]’ and ‘const char [6]’ to binary ‘operator+’

Я также пыталсяs+= (" " + "there!"); и он тоже не работает.

Почему я не могу использовать двоичный оператор += для конкатенации строк таким образом?

Ответы [ 3 ]

10 голосов
/ 09 февраля 2012

Проблема в том, что вы пытаетесь "добавить" две буквенные строки. Строковые литералы не относятся к типу std :: string в C ++, они похожи на неизменяемые массивы символов. Добавление двух вместе не имеет смысла, как если бы вы добавили два указателя вместе.

Однако вы можете сделать это:

std::string("foo") + "bar"

Это потому, что в C ++ определены методы для конкатенации строк C ++ со строками C.

9 голосов
/ 09 февраля 2012

Литеральные строки не являются строковыми объектами, это просто массивы символов. Когда вы пытаетесь добавить их таким образом, они распадаются на указатели на массивы - и вы не можете добавить пару указателей. Если вы преобразуете первый литерал в строковый объект, он будет работать так, как вы ожидаете.

s += string(" ") + "there!";

Вы также можете объединять литералы, просто помещая их рядом друг с другом без +.

s += " "  "there!";
1 голос
/ 09 февраля 2012

Когда я пытаюсь это сделать, я получаю:

632 $ g++ foo.C
foo.C: In function ‘int main()’:
foo.C:5:16: error: invalid operands of types ‘const char [2]’ and ‘const char [7]’ to binary ‘operator+’

, который говорит мне "" - это массив константных символов, а не строка.

Это работает:

636 $ cat foo.C
#include <string>
using std::string;
int main(void){
    string s = "hi";
    s += string(" ") + string("there!");
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...