Как правильно сделать const std::string в заголовочном файле?

Я пишу игру Cocos2D-X, в которой игрок, враги и другие персонажи хранят свои атрибуты в CCMutableDictionary, который является своего рода классом-декоратором для std::map. Доступ к значению в словаре можно получить с помощью метода CCMutableDictionary::objectForKey(const std::string& key).

Теперь в заголовочном файле, включенном во многие мои файлы .cpp, у меня есть несколько строк const char * constдля доступа к значениям в словарях, например:

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

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

Итак, поправьте меня, если я ошибаюсь, но конструктор копирования std::stringвызывается, и временный std::stringнаходится в стеке каждый раз, когда я вызываю один из выше методы objectForKeyс использованием const char* const, верно?

Если это так, я считаю, что было бы более эффективно во время выполнения, если бы эти постоянные ключи атрибутов уже были объектами std::string. Но как мне сделать это правильнымспособом?

Если их определить в файле Constants.h следующим образом, компилируется нормально, но у меня такое чувство, что что-то не так:

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

Приношу свои извинения, если этот вопрос уже задавался. Кажется, я не мог найти точный ответ, который искал здесь, в StackOverflow.

12
задан Nathanael Weiss 18 April 2012 в 02:15
поделиться