Nat*_*iss 12 c++ static const stdstring
我正在写一个Cocos2D-X游戏,其中玩家,敌人和其他角色将他们的属性存储在a中CCMutableDictionary
,这有点像装饰类std::map<std::string, CCObject*>
.可以通过该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);
Run Code Online (Sandbox Code Playgroud)
所以,如果我错了,请纠正我,但每当我使用a 调用上述方法之一时,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";
Run Code Online (Sandbox Code Playgroud)
如果已经提出这个问题我很抱歉.我似乎找不到我在StackOverflow上寻找的确切答案.
Som*_*ude 24
你写的代码是完全没有问题的,至少你只#include
在Constants.h
只有一个源文件的文件.如果在多个源文件中使用头文件,则将多次定义相同的变量.在头文件中正确使用常量是将它们分成Constants.h
包含变量声明的header()和包含变量定义的源文件(Constants.cpp
):
头文件:
#ifndef CONSTANTS_H
#define CONSTANTS_H
extern const std::string kAttributeX;
extern const std::string kAttributeY;
#endif
Run Code Online (Sandbox Code Playgroud)
源文件:
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
Run Code Online (Sandbox Code Playgroud)