Wiem, że to częsty problem, ale szukając referencji i innych materiałów nie znajduję jednoznacznej odpowiedzi na to pytanie.
Rozważ następujący kod:
#include <string>
// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Kompilator mówi mi, że nie może znaleźć przeciążonego operatora dla char[dim]
.
Czy to oznacza, że w ciągu nie ma operatora +?
Ale w kilku przykładach jest taka sytuacja. Jeśli to nie jest właściwy sposób łączenia większej liczby ciągów, jaki jest najlepszy sposób?
Odpowiedzi:
Twój kod, tak jak napisano, działa. Prawdopodobnie próbujesz osiągnąć coś niezwiązanego, ale podobnego:
std::string c = "hello" + "world";
To nie działa, ponieważ dla C ++ wygląda na to, że próbujesz dodać dwa
char
wskaźniki. Zamiast tego musisz przekonwertować co najmniej jeden zchar*
literałów na plikstd::string
. Albo można zrobić to, co już pisał w pytaniu (jak powiedziałem, to kod będzie działać) lub wykonać następujące czynności:std::string c = std::string("hello") + "world";
źródło
const char[]
raczej tego typu niżstd::string
. W C (a więc także w C ++) tablice bardzo łatwo rozpadają się na wskaźniki, dlatego „a” + „b” wywoła wbudowany operator, który dodaje dwa wskaźniki. Rezultat tego (wskaźnik wskazujący gdzieś w pamięci) jest oczywiście całkiem bezużyteczny, ale mimo to utknęliśmy z tym.std::string c = "Hello" "world";
na przykład spowodujec == "Helloworld"
.std;:string c = "hello"s + "world"s;
lub po prostu nadać jednemu z nich plikstd::string
.std::string a = "Hello "; a += "World";
źródło
Zrobiłbym to:
std::string a("Hello "); std::string b("World"); std::string c = a + b;
Który kompiluje się w VS2008.
źródło
std::string a = "Hello "; std::string b = "World "; std::string c = a; c.append(b);
źródło