Bonne façon de le faire const std::string dans un fichier d'en-tête?

Je suis en train d'écrire un Cocos2D-X jeu où le joueur, les ennemis et les autres personnages de stocker leurs attributs dans un CCMutableDictionary, qui est en quelque sorte d'un décorateur de classe pour std::map<std::string, CCObject*>. Une valeur dans le dictionnaire peut être consulté via le CCMutableDictionary::objectForKey(const std::string& key) méthode.

Maintenant, dans un fichier d'en-tête inclus par beaucoup de mes .fichiers cpp, j'ai un peu de const char * const chaînes pour accéder aux valeurs dans les dictionnaires, comme ceci:

//in Constants.h
const char* const kAttributeX = "x";
const char* const kAttributeY = "y";

//in a .cpp file
CCObject* x = someDictionary->objectForKey(kAttributeX);

Donc, corrigez-moi si je me trompe, mais std::string'constructeur de copie est appelé et temporaire std::string est sur la pile à chaque fois que j'appel un des ci-dessus objectForKey méthodes à l'aide d'un const char* const, droit?

Si oui, je pense qu'il serait plus efficace lors de l'exécution si ceux attribut constant clés ont été déjà std::string objets. Mais comment puis-je faire pour que l' droit?

Définir les Constantes.h fichier comme suit compile bien, mais j'ai le sentiment que quelque chose n'est pas droite:

//in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";

Toutes mes excuses si cette question a déjà été posée. Je n'arrivais pas à trouver la réponse exacte je cherche ici sur StackOverflow.

OriginalL'auteur Nathanael Weiss | 2012-04-18