Sei que é um problema comum, mas procurando referências e outros materiais não encontro uma resposta clara para essa pergunta.
Considere o seguinte código:
#include <string>
// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
O compilador me diz que não consegue encontrar um operador sobrecarregado para char[dim]
.
Isso significa que na string não há um operador +?
Mas em vários exemplos, há uma situação como esta. Se esta não é a maneira correta de concatear mais strings, qual é a melhor maneira?
Respostas:
Seu código, conforme escrito, funciona. Você provavelmente está tentando alcançar algo não relacionado, mas semelhante:
std::string c = "hello" + "world";
Isso não funciona porque para C ++ parece que você está tentando adicionar dois
char
ponteiros. Em vez disso, você precisa converter pelo menos um doschar*
literais em astd::string
. Ou você pode fazer o que você já postou a pergunta (como eu disse, este código vai funcionar) ou você faça o seguinte:std::string c = std::string("hello") + "world";
fonte
const char[]
, em vez destd::string
. Em C (e, portanto, também em C ++) os arrays decaem para ponteiros com muita facilidade, e é por isso que "a" + "b" invocará o operador interno que adiciona dois ponteiros. O resultado disso (um ponteiro apontando para algum lugar na memória) é, obviamente, totalmente inútil, mas mesmo assim é com o que estamos presos.std::string c = "Hello" "world";
, por exemplo, resultará emc == "Helloworld"
.std;:string c = "hello"s + "world"s;
ou apenas tornar um deles umstd::string
.std::string a = "Hello "; a += "World";
fonte
Eu faria isso:
std::string a("Hello "); std::string b("World"); std::string c = a + b;
Que compila no VS2008.
fonte
std::string a = "Hello "; std::string b = "World "; std::string c = a; c.append(b);
fonte