C에서는 정적 데이터 특정 특정 경우를 제외하고는 클래스의 멤버를 클래스 정의 내에서 직접 초기화할 수 없습니다.
정적 데이터 멤버는 프로그램의 메모리 세그먼트에 할당되며 프로그램의 모든 인스턴스에서 공유됩니다. 수업. C 표준은 여러 번역 단위에서 동일한 변수에 대한 여러 정의를 방지하기 위해 클래스 내 초기화를 금지합니다.
마찬가지로, 배열은 연속적인 메모리 블록을 차지하므로 클래스의 정적 배열은 클래스 내에서 초기화될 수 없습니다. 클래스 내 초기화를 허용하면 각 번역 단위에서 동일한 배열의 여러 복사본이 생성되어 예기치 않은 동작이 발생하게 됩니다.
정적 const 정수 유형 및 열거형 유형에는 이러한 규칙에 대한 예외가 있습니다. 이러한 유형은 컴파일 시간 상수로 처리되고 해당 값이 컴파일 순간에 알려지기 때문에 클래스 내에서 초기화될 수 있습니다.
클래스에서 정적 배열을 초기화하려면 "enum 트릭"을 사용할 수 있습니다.
enum { arrsize = 2 };
static const int c[arrsize] = { 1, 2 };
이 접근 방식은 열거형 상수 arrsize를 선언하여 배열 크기를 결정한 다음 정적을 초기화하는 데 사용됩니다. const 배열 c.
C 11은 이러한 제한을 다소 완화했습니다. 이제 "리터럴 유형"으로 알려진 특정 유형의 정적 데이터 멤버를 중괄호 또는 동등 초기화 프로그램을 사용하여 클래스 내에서 초기화할 수 있습니다. 또한 C 11에서는 상수 표현식을 사용하여 클래스 내에서 비정적 데이터 멤버를 초기화할 수 있습니다.
위 내용은 C 클래스에서 정적 멤버와 배열을 직접 초기화할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!