2010-12-06 33 views
1

Il est très inutile et gênant que chaque fois que vous devez concaténer deux chaînes, il est nécessaire de faire au moins:C++ surcharge opérateur + pour concaténer toujours des chaînes de toutes sortes

std::string mystr = std::string("Hello") + " World"; 

Je voudrais surcharger opérateur + et l'utiliser afin de toujours faire un concat entre tho char * de cette façon:

std::string mystr = "Ciao " + "Mondo". 

Comment feriez-vous? J'aimerais trouver une bonne pratique. Merci ...

Ah est-ce que boost a quelque chose à résoudre?

+6

Vous savez, un point d'interrogation est suffisant pour indiquer que quelque chose est une question.En utilisant six d'entre eux ne pose plus de question.Sauf que votre chat assis sur le clavier, il n'y a aucune raison – jalf

+0

Vous avez raison, je suis désolé ... – Andry

+0

Meilleures pratiques de concaténation de chaîne STL: http://stackoverflow.com/questions/611263/efficient-string-concatenation-in-c –

Répondre

5

Vous ne pouvez pas faire fonctionner + comme ceci. Pour définir une surcharge d'opérateur, au moins l'un des opérandes doit être un type défini par l'utilisateur.

Cependant, la fonctionnalité est intégrée: si vous venez de mettre deux chaînes littérales ensemble "like" "this", elles seront automatiquement assemblées au moment de la compilation.

+0

Mais si j'essaie "Hello" + "World" compilateur devient fou ... – Andry

+1

@Andry: Pourquoi voudriez-vous taper "Bonjour" + "Monde" 'quand" Bonjour "" Monde "' (a) est plus court à taper et (b) fonctionne? –

+0

@Andry c'est juste ce que j'ai fini de dire dans la première partie. Notez, dans la deuxième partie, qu'il n'y a pas de "+" dans "like" "this". –

2

Vous ne pouvez pas. Il n'y a aucun moyen de surcharger les opérateurs entre les types intégrés. Je ne sais pas non plus pourquoi c'est si "gênant". Si vous effectuez de nombreuses opérations sur les chaînes, alors l'un des paramètres déjà doit être de type std::string.

1

Vous ne pouvez pas. Pensez-y - qu'est-ce que "Ciao" et "Mondo", vraiment? Ce sont des tableaux statiques de caractères. Vous ne pouvez pas ajouter des tableaux statiques ensemble, comme le compilateur pointera obligeamment pour le code suivant:

#include <iostream> 

int main() 
{ 
    std::string mystr = "Ciao " + "Mondo"; 
    std::cout << mystr << std::endl; 
    return 0; 
} 

(sortie:.

In function 'int main()': 
Line 5: error: invalid operands of types 'const char [6]' and 'const char [6]' to binary 'operator+' 

C'est tout c'est à peu près dupe: const char* concatenation