私は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);
ので、なら、私を修正I上記のobjectForKey
メソッドの1つをconst char* const
を使用して呼び出すたびに、std::string
のコピーコンストラクタが呼び出されており、一時的なstd::string
がスタックにあります。
もしそうなら、定数属性キーが既にstd::string
のオブジェクトであれば、実行時に効率的になると思います。しかし、どうすればいいのですか右?
以下の罰金コンパイルのようなファイルConstants.hでそれらを定義するが、私は何かがちょうどではないことを感じてい:この質問は、すでに依頼された場合
// in Constants.h
const std::string kAttributeX = "x";
const std::string kAttributeY = "y";
私の謝罪を。私はStackOverflowでここで探していた正確な答えを見つけることができなかった。
したがって、文字列が.cppファイルで定義されている場合、実際にインスタンス化されるのはいつですか? –
@NatWeissこれらは、他のすべてのグローバル変数とともにインスタンス化されます。 –
"const char * const"のときに複数回定義された変数の問題は当てはまりますか?私はそれがないと確信していますが、私は理由を理解していません。 const char * constに、その値を含む単一の場所で定義される特権を与えるもの(特に保守の面でIMO、もっと良い)? – Brent212