C에서 정적 멤버 변수 초기화
C에서 정적 멤버 변수는 클래스 정의 외부에서 초기화됩니다. 이 디자인 선택은 논리적 추론과 잠재적 레거시 영향에 대한 의문을 제기했습니다.
외부 초기화 이유
정적 멤버는 준수할 정확히 하나의 번역 단위에 정의되어야 합니다. 단일 정의 규칙. 클래스 내에서 초기화가 허용된 경우 헤더 파일이 포함된 다양한 번역 단위에서 여러 정의가 발생할 수 있습니다.
예
다음 코드 조각을 고려하세요.
struct Gizmo { static string name = "Foo"; };
클래스 내에서 이름이 초기화된다면 헤더를 포함하는 각 번역 단위에서 정의됩니다. 파일. 이는 단일 정의 규칙을 위반하는 것입니다.
필수 정적 멤버
C에서는 선언 내에서 필수 정적 멤버의 초기화를 허용합니다. 그러나 단일 정의 규칙을 충족하려면 단일 번역 단위 내에서 외부 정의가 여전히 필요합니다. 이는 구문 단축 기능을 합니다.
struct Gizmo { static const int count = 42; };
초기화에 사용된 식이 const 정수 또는 열거 유형이고 컴파일 타임에 평가될 수 있고 정의가 단일 번역 단위에 존재하는 한, 이 접근 방식은 유효합니다. 예:
gizmo.cpp
#include "gizmo.h" const int Gizmo::count;
위 내용은 C 정적 멤버 변수가 클래스 정의 외부에서 초기화되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!