gpt4 book ai didi

c++ - 在头文件中执行 const std::string 的正确方法?

转载 作者:IT老高 更新时间:2023-10-28 23:11:37 39 4
gpt4 key购买 nike

我正在编写一个 Cocos2D-X 游戏,其中玩家、敌人和其他角色将他们的属性存储在 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);

所以,如果我错了,请纠正我,但是 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 上找到我正在寻找的确切答案。

最佳答案

您编写的代码非常好,至少您仅在一个源文件中#include Constants.h 文件。如果您在多个源文件中使用头文件,您将多次定义相同的变量。头文件中常量的正确使用是将它们拆分为一个包含变量声明的头文件(Constants.h)和一个源文件( Constants.cpp),其中包含变量的定义:

头文件:

#ifndef CONSTANTS_H
#define CONSTANTS_H

extern const std::string kAttributeX;
extern const std::string kAttributeY;

#endif

源文件:

const std::string kAttributeX = "x";
const std::string kAttributeY = "y";

关于c++ - 在头文件中执行 const std::string 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201880/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com