C에서 Const 개체의 기본 초기화를 위해 사용자 제공 생성자가 필요한 이유
C 표준에서는 개체를 기본 초기화할 때 다음을 지정합니다. const 한정 유형의 경우 해당 유형에는 사용자가 제공한 기본 생성자가 있어야 합니다. 이 요구 사항은 POD(Plain Old Data) 개념과 C의 개체 초기화 간의 상호 작용으로 인해 발생합니다.
C에서는 POD가 아닌 클래스의 개체가 기본적으로 초기화됩니다. 그러나 생성자, 유효성 검사기 또는 소멸자가 없는 경량 데이터 유형인 POD는 기본적으로 초기화되지 않습니다. 이는 POD가 명시적 초기화가 더 효율적인 성능에 민감한 시나리오를 위해 설계되었기 때문입니다.
const 한정 유형의 객체를 초기화할 때 표준에서는 객체가 초기화될 수 있도록 사용자 제공 생성자를 요구합니다. 초기화되었습니다. 기본 클래스가 생성자가 없는 POD인 경우 객체가 초기화되지 않은 상태로 남아 쓸모 없게 되기 때문에 이것이 필요합니다.
예제 코드를 고려하세요.
struct B { B() : x(42) {} int doSomeStuff() const { return x; } int x; }; struct A { A() {} // Why is this required? B b; // Just for illustration }; int main() { const A a; }
이 코드에서 객체 a는 const 자격을 갖습니다. A 클래스에 사용자 제공 생성자가 없으면 POD로 간주됩니다. POD는 기본적으로 초기화되지 않으므로 a는 초기화되지 않아 코드가 유효하지 않게 됩니다.
그러나 A 클래스에는 사용자 제공 생성자가 있으므로 POD가 아닙니다. 따라서 a는 생성자를 호출하여 기본적으로 초기화되고 코드는 성공적으로 컴파일됩니다.
따라서 사용자 제공 생성자에 대한 표준 요구 사항은 const 한정 유형의 객체를 적절하게 초기화하고 사용할 수 있도록 보장하는 것입니다. .
위 내용은 C의 Const 개체에 사용자 정의 기본 생성자가 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!