Je sais que c'est un problème courant, mais à la recherche de références et d'autres documents, je ne trouve pas de réponse claire à cette question.
Considérez le code suivant:
#include <string>
// ...
// in a method
std::string a = "Hello ";
std::string b = "World";
std::string c = a + b;
Le compilateur me dit qu'il ne trouve pas d'opérateur surchargé pour char[dim]
.
Cela signifie-t-il que dans la chaîne il n'y a pas d'opérateur +?
Mais dans plusieurs exemples, il y a une situation comme celle-ci. Si ce n'est pas la bonne façon de concater plus de chaînes, quelle est la meilleure façon?
Réponses:
Votre code, tel qu'il est écrit, fonctionne. Vous essayez probablement de réaliser quelque chose sans rapport, mais similaire:
std::string c = "hello" + "world";
Cela ne fonctionne pas car pour C ++, il semble que vous essayez d'ajouter deux
char
pointeurs. Au lieu de cela, vous devez convertir au moins l'un deschar*
littéraux en un fichierstd::string
. Ou vous pouvez faire ce que vous avez déjà la question a écrit dans (comme je le disais, ce code va travailler) ou vous effectuez les opérations suivantes:std::string c = std::string("hello") + "world";
la source
const char[]
plutôt questd::string
. En C (et donc aussi en C ++), les tableaux se désintègrent très facilement en pointeurs, c'est pourquoi "a" + "b" invoquera l'opérateur intégré qui ajoute deux pointeurs. Le résultat de cela (un pointeur pointant quelque part dans la mémoire) est bien sûr tout à fait inutile, mais c'est néanmoins ce à quoi nous sommes coincés.std::string c = "Hello" "world";
, par exemple, se traduira parc == "Helloworld"
.std;:string c = "hello"s + "world"s;
ou simplement en faire unstd::string
.std::string a = "Hello "; a += "World";
la source
Je ferais ceci:
std::string a("Hello "); std::string b("World"); std::string c = a + b;
Qui compile dans VS2008.
la source
std::string a = "Hello "; std::string b = "World "; std::string c = a; c.append(b);
la source