【发布时间】:2013-04-28 23:36:34
【问题描述】:
在 C++ 中,如何使变量成为常量,但在构造函数中分配给它?我想这样做的原因是因为我试图通过将所有数据放入 XML 文件然后将该数据加载到变量中来使用数据驱动设计。问题是我无法在初始化列表中加载值,所以我必须在构造函数(或其他地方)中加载,但变量不是常量。
这是一个 XML 文件:
<weapons>
<pistol>
<damage>5.0</damage>
...
</pistol>
...
</weapons>
然后我有一个像这样的类:
标题
class Weapon
{
public:
Weapon();
const float damage;
};
来源
#include "Weapon.h"
Weapon::Weapon()
{
//load damage value into damage variable
}
因为损坏变量是常量,所以我不能在构造函数中对它做任何事情,只能在初始化列表中,但显然我不能像在初始化列表中读取 XML 文件那样执行代码。因此,即使变量永远不会改变,我应该不让它保持不变还是有适当的方法让它保持不变并做我需要的事情?
【问题讨论】:
-
为什么不能在初始化列表中执行这样的代码?只需编写一个独立的函数(最好在 Weapon.cpp 中的匿名命名空间中),它会解析出伤害值并返回它。然后您可以在初始化损坏变量时在初始化器列表中调用该函数。哦,请把它设为私有。
-
是的,我什至没有考虑过查看我对已接受答案的评论。是的,我会将其设为私有。
标签: c++ initialization constants