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

클래스 선언 외부에서 C 정적 멤버 변수를 초기화하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-25 15:11:21794검색

Why Initialize C   Static Member Variables Outside the Class Declaration?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.