我有一个类,我想要一些值为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
关于如何做到这一点的任何想法?
谢谢!
答案 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)
你可以这样做:
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.