在C ++中声明一个const int数组

时间:2009-05-30 01:47:45

标签: c++ arrays const declaration

我有一个类,我想要一些值为0,1,3,7,15,...

的位掩码

所以基本上我想声明一个常量int的数组,例如:

class A{

const int masks[] = {0,1,3,5,7,....}

}

但编译器总会抱怨。

我试过了:

static const int masks[] = {0,1...}

static const int masks[9]; // then initializing inside the constructor

关于如何做到这一点的任何想法?

谢谢!

5 个答案:

答案 0 :(得分:24)

class A {
    static const int masks[];
};

const int A::masks[] = { 1, 2, 3, 4, ... };

您可能想要在类定义中修复数组,但您不必这样做。该数组在定义点(将保留在.cpp文件内,而不是在标题中)将具有完整类型,它可以从初始化程序中推断出大小。

答案 1 :(得分:9)

// in the .h file
class A {
  static int const masks[];
};

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};

答案 2 :(得分:2)

enum Masks {A=0,B=1,c=3,d=5,e=7};

答案 3 :(得分:2)

  1. 您只能在构造函数或其他方法中初始化变量。
  2. 'static'变量必须从类定义中初始化。
  3. 你可以这样做:

    class A {
        static const int masks[];
    };
    
    const int A::masks[] = { 1, 2, 3, 4, .... };
    

答案 4 :(得分:2)

嗯,这是因为你不能在不调用方法的情况下初始化私有成员。 对于const和静态数据成员,我总是使用成员初始化列表

如果您不知道会员初始化列表是什么,它们就是您想要的。

看看这段代码:

    class foo
{
int const b[2];
int a;

foo():    b{2,3}, a(5) //initializes Data Member
{
//Other Code
}

}

GCC还有这个很酷的扩展名:

const int a[] = { [0] = 1, [5] = 5 }; //  initializes element 0 to 1, and element 5 to 5. Every other elements to 0.