C 11 클래스 내 초기화: 과거 제한 사항 해결
C 11 이전에는 클래스 내 초기화가 static const 멤버로 제한되었습니다. 또는 열거형. 이러한 제한은 복잡한 링커 규칙을 피하고 각 개체가 고유한 정의를 갖도록 보장해야 하는 필요성에서 비롯되었습니다.
그러나 C 11은 비정적 및 비상수 멤버의 클래스 내 초기화를 허용함으로써 중요한 변경 사항을 도입했습니다(§ 12.6.2/8). 이러한 완화는 이제 잠재적인 다중 정의를 정렬하는 책임을 맡게 되어 더 복잡한 클래스 선언이 가능해지는 컴파일러의 개선으로 인해 가능했습니다.
비정적 데이터 멤버의 경우 중괄호 또는 같음 이니셜라이저는 객체 생성 중에 초기화하는 데 사용할 수 있습니다. Variant 멤버는 명시적으로 지정하지 않는 한 초기화되지 않지만, 초기화 프로그램이 제공되지 않으면 기본 초기화가 수행됩니다.
이제 constexpr 지정자를 사용하여 선언하면 const가 아닌 정적 멤버의 클래스 내 초기화도 가능합니다( 섹션 9.4.2).
이러한 변경 사항으로 인해 클래스 외부 멤버 초기화가 필요 없어 코드 단순성과 효율성이 향상되었습니다. 그러나 다른 클래스 생성자 내에서 잠재적인 중복 초기화를 처리하기 위한 새로운 규칙도 도입되었습니다. 예를 들어 멤버 변수에 클래스 내 초기화가 있고 생성자 내에서도 초기화되는 경우 해당 생성자를 사용할 때 클래스 내 초기화는 무시됩니다.
요약하자면, 기본 구현 복잡성이 바뀌었지만 링커에서 컴파일러까지, C 11의 클래스 내 초기화는 클래스 정의 및 멤버 초기화 기능을 크게 향상시켜 코드 가독성과 유연성을 향상시킵니다.
위 내용은 C 11은 클래스 내 초기화를 어떻게 향상합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!