> 백엔드 개발 > C++ > C 정적 멤버 변수가 클래스 정의 외부에서 초기화되는 이유는 무엇입니까?

C 정적 멤버 변수가 클래스 정의 외부에서 초기화되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-03 18:11:23
원래의
403명이 탐색했습니다.

Why are C   Static Member Variables Initialized Outside the Class Definition?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿