为什么我可以写这个:

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 。为什么?

最佳答案

必须在编译时知道数组边界。尽管您的初始化写在代码中,但它可以在运行时被构造函数覆盖。因此,您的非 static 成员变量不是编译时常量。

关于c++ - 为什么我在这里需要静态?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41956862/

10-09 06:23