为什么我需要静态?

mar*_*zzz 4 c++ static const init

为什么我可以写这个:

class VoiceManager
{
public:
    static const int mMaxNumOfVoices = 16;
    Voice mVoices[mMaxNumOfVoices];

private:
};
Run Code Online (Sandbox Code Playgroud)

但我不能用这个:

class VoiceManager
{
public:
    const int mMaxNumOfVoices = 16;
    Voice mVoices[mMaxNumOfVoices];

private:
};
Run Code Online (Sandbox Code Playgroud)

它说:" 非静态成员引用必须与特定对象相关 "

但在这两种情况下,mMaxNumOfVoices是一个const并且将在init之前mVoices初始化(编译器遵循声明顺序,没有?).

但它需要static.为什么?

Lig*_*ica 16

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

  • @paizza - [是的可以](http://ideone.com/kcdFBe).非静态成员变量始终可以在构造函数中设置其值,即使它是使用默认初始值设定项提供的. (8认同)