c ++에서 const int 배열을 선언하십시오
-
06-09-2019 - |
문제
나는 수업이 있고 값이 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
이것이 어떻게 할 수 있는지에 대한 아이디어가 있습니까?
감사!
해결책
class A {
static const int masks[];
};
const int A::masks[] = { 1, 2, 3, 4, ... };
클래스 정의 내에서 배열을 고정하고 싶을 수도 있지만 필요하지 않습니다. 배열은 이니셜 라이저에서 크기를 추론 할 수있는 정의 지점 (헤더가 아닌 .CPP 파일 내에 유지)에 완전한 유형을 갖습니다.
다른 팁
// in the .h file
class A {
static int const masks[];
};
// in the .cpp file
int const A::masks[] = {0,1,3,5,7};
enum Masks {A=0,B=1,c=3,d=5,e=7};
- 생성자 또는 기타 방법에서만 변수를 초기화 할 수 있습니다.
- '정적'변수는 클래스 정의에서 초기화되어야합니다.
당신은 이것을 할 수 있습니다 :
class A {
static const int masks[];
};
const int A::masks[] = { 1, 2, 3, 4, .... };
글쎄, 이것은 방법을 호출하지 않고 개인 구성원을 초기화 할 수 없기 때문입니다. 나는 항상 사용합니다 회원 초기화 목록 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.
제휴하지 않습니다 StackOverflow