为什么我需要静态?

时间:2017-01-31 11:51:18

标签: c++ static const init

为什么我可以这样写:

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之前是init(编译器遵循声明顺序,不是吗?)。

但它需要static。为什么呢?

2 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:1)

const关键字表示只读,而不是常量,就像是程序特定部分的不可更改的承诺。如果你有一个指向const的指针,那么程序的其他部分可能会在你不看时改变它。

但保证static const对于程序的其余部分保持不变。程序开始时分配对象的存储空间,程序结束时分配存储空间。只存在一个对象实例。在命名空间作用域(包括全局命名空间)声明的所有对象都有此存储持续时间。