14

我有一堂课,我想要一些值为 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

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

谢谢!

4

5 回答 5

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

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

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

于 2009-05-30T01:53:57.170 回答
9
// in the .h file
class A {
  static int const masks[];
};

// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
于 2009-05-30T01:56:33.030 回答
2
enum Masks {A=0,B=1,c=3,d=5,e=7};
于 2009-05-30T01:49:48.457 回答
2
  1. 您只能在构造函数或其他方法中初始化变量。
  2. “静态”变量必须从类定义中初始化。

你可以这样做:

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

const int A::masks[] = { 1, 2, 3, 4, .... };
于 2009-05-30T01:58:01.827 回答
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.
于 2014-03-04T04:19:07.120 回答