我正在写一个Cocos2D-X游戏,其中玩家,敌人和其他角色将他们的属性存储在CCMutableDictionary
中,这是std::map<std::string, CCObject*>
的装饰类。字典中的值可以通过CCMutableDictionary::objectForKey(const std::string& key)
方法访问。现在在头文件中执行const std :: string的正确方法?
,通过我的很多.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
的拷贝构造函数正在被调用,并且每当我使用const char* const
调用上述objectForKey
方法中的一个时,临时std::string
就在堆栈上,对吧?
如果是这样,我觉得如果这些常量属性键已经是std::string
对象,那么运行效率会更高。但我该怎么做,权利的方式?
定义他们在Constants.h文件中像下面编译罚款,但我有一种感觉,有些事情是不正确的:
// in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
我的道歉,如果这个问题已经问。我似乎无法找到我在StackOverflow上寻找的确切答案。
因此,如果字符串是在.cpp文件中定义的,它们何时实际实例化? – 2012-04-18 03:39:04
@NatWeiss它们将与所有其他全局变量一起实例化。 – 2012-04-18 18:26:34
多次定义的变量问题是否适用于“const char * const”?我很确定它没有,但我不明白为什么。是什么赋予“const char * const”在单个位置定义的特权,包括其值(更好,IMO,特别是维护方面)? – Brent212 2015-02-06 23:09:47