【发布时间】:2017-01-31 11:51:18
【问题描述】:
为什么我可以写这个:
class VoiceManager
{
public:
static const int mMaxNumOfVoices = 16;
Voice mVoices[mMaxNumOfVoices];
private:
};
但我不能用这个:
class VoiceManager
{
public:
const int mMaxNumOfVoices = 16;
Voice mVoices[mMaxNumOfVoices];
private:
};
它说:“非静态成员引用必须相对于特定对象”
但在这两种情况下,mMaxNumOfVoices 都是 const 并且将在 mVoices init 之前进行初始化(编译器遵循声明顺序,不是吗?)。
但它需要static。为什么?
【问题讨论】:
-
请提供上下文和错误信息。
-
也许是因为它直到运行时才知道
mMaxNumOfVoices是什么?并且使用static强制知道这个值。 -
我认为只有
const不会使其成为编译时常量,而static const会 -
我不明白反对票。这是一个关于
const语义微妙性的好问题。 -
@StoryTeller 我刚刚对这个问题投了赞成票。有时在快速否决的投票中令人沮丧。我理解它为什么会出现,但有时会令人沮丧。