То, что вы видите, является результатом order of evaluation
.
Оператор +=
заставит вычислять правую часть выражения и результатбудет добавлен к строке.
Это то, что вызывает проблему, с которой вы сталкиваетесь, потому что правая сторона не std::string
, и, следовательно, значение оператора +
в этом rhs просто переводитуказатель на арифметику, а не на конкатенацию строк, как и следовало ожидать.
Простое исправление должно быть более явным и сделать это:
rString = rString + "B" + str.at(i);
Теперь компилятор сначала оценивает правильнуюсторона оператора =
в виде строки, и вы получите конкатенацию.Это также дает дополнительное преимущество, позволяя компилятору сообщать вам, если правая часть не является строкой.
Другой альтернативой является использование потоков строк.Я думаю, что это выглядит чище, поэтому вот оно:
#include <sstream>
...
string wordB(string str) {
std::ostringstream oss;
for (unsigned i = 0; i < str.length(); ++i) {
oss << 'B' << str.at(i);
}
cout << endl << oss.str();
return oss.str();
}