> 백엔드 개발 > C++ > 'const' 객체를 기본 구성하기 위해 C 클래스에 사용자 정의 기본 생성자가 있어야 하는 이유는 무엇입니까?

'const' 객체를 기본 구성하기 위해 C 클래스에 사용자 정의 기본 생성자가 있어야 하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-29 10:10:11
원래의
609명이 탐색했습니다.

Why Must C   Classes Have a User-Defined Default Constructor to Default-Construct a `const` Object?

C에서 const 개체를 기본 구성하기 위해 사용자 제공 기본 생성자가 필요한 이유는 무엇입니까?

C 표준에서는 프로그램이 const 한정 유형의 객체에 대한 기본 초기화를 호출하는 경우 기본 클래스 유형은 사용자가 제공한 기본 생성자를 보유해야 합니다. 이 요구 사항은 다음과 같은 사실에서 비롯됩니다.

  • POD(Plain Old Data) 클래스에는 기본 초기화가 부족합니다. POD 클래스에 사용자 정의 생성자가 없으면 다음과 같습니다. 기본 초기화될 수 있습니다. 그러나 초기화가 부족한 POD 객체는 상태가 불확실하므로 실용적인 목적이 없습니다.
  • Const 객체는 즉각적인 초기화를 요구합니다. POD 객체와 달리 const 객체는 상태를 변경할 수 없기 때문에 즉각적인 초기화가 필요합니다. 한번 설립되면 변경됨. POD 유형의 const 객체를 초기화되지 않은 상태로 두면 해당 값을 수정할 수 없으므로 쓸모가 없게 됩니다.

이러한 문제를 방지하기 위해 표준에서는 POD 유형이 부족한 POD 유형에서 const 객체를 생성할 수 없도록 규정하고 있습니다. 사용자가 제공한 기본 생성자. 이렇게 하면 생성 시 const 객체가 항상 초기화됩니다.

POD 클래스와 비POD 클래스의 구별

명확히 말하자면, 표준 요구 사항은 특히 non-POD 클래스의 const 객체에 적용됩니다. -POD 수업. 가상 함수나 기본 클래스가 없고 그 자체가 POD인 데이터 멤버가 있는 POD 클래스는 사용자 정의 생성자가 없어도 기본 초기화될 수 있습니다. 반면, POD가 아닌 클래스에는 기본 초기화를 활성화하기 위해 사용자가 제공한 기본 생성자가 필요합니다.

설명 예

다음 코드 조각을 고려하세요.

struct B {
  B(): x(42) {}
  int doSomeStuff() const { return x; }
  int x;
};

struct A {
  A() {} // Required by the standard
  B b; // Illustration purpose
};

int main() {
  const A a; // Valid due to user-provided default constructor in A.
}
로그인 후 복사

이 예에서 A 구조체의 const 객체 'a'는 기본 생성될 수 있습니다. POD가 아닌 클래스에 대한 표준 요구 사항을 충족하는 사용자 제공 기본 생성자가 있습니다.

위 내용은 'const' 객체를 기본 구성하기 위해 C 클래스에 사용자 정의 기본 생성자가 있어야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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