Я знаю, что это обычная проблема, но, ища ссылки и другие материалы, я не нахожу четкого ответа на этот вопрос.
Рассмотрим следующий код:
#include <string>
// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Компилятор сообщает мне, что не может найти перегруженный оператор для char[dim]
.
Значит ли это, что в строке нет оператора +?
Но в нескольких примерах есть ситуация, подобная этой. Если это неправильный способ объединения большего количества строк, каков лучший способ?
Ответы:
Ваш код в том виде, в котором он написан, работает. Вероятно, вы пытаетесь достичь чего-то несвязанного, но похожего:
std::string c = "hello" + "world";
Это не работает, потому что для C ++ похоже, что вы пытаетесь добавить два
char
указателя. Вместо этого вам нужно преобразовать хотя бы один изchar*
литералов вstd::string
. Либо вы можете сделать то, что уже написали в вопросе (как я уже сказал, этот код будет работать), либо выполните следующие действия:std::string c = std::string("hello") + "world";
источник
const char[]
, а неstd::string
. В C (а, следовательно, и в C ++) массивы очень легко распадаются на указатели, поэтому «a» + «b» вызовет встроенный оператор, который добавляет два указателя. Результат этого (указатель, указывающий куда-то в память), конечно, совершенно бесполезен, но, тем не менее, это то, с чем мы застряли.std::string c = "Hello" "world";
, например, приведет кc == "Helloworld"
.std;:string c = "hello"s + "world"s;
или просто сделать один из нихstd::string
.std::string a = "Hello "; a += "World";
источник
Я бы сделал это:
std::string a("Hello "); std::string b("World"); std::string c = a + b;
Что компилируется в VS2008.
источник
std::string a = "Hello "; std::string b = "World "; std::string c = a; c.append(b);
источник