C 11의 클래스 내 초기화: 제약 조건의 변화
C 11에서는 중요한 변경 사항이 도입되어 클래스 내에서 초기화가 가능해졌습니다. 비정적 및 비 const 멤버의 초기화. 이전에는 그러한 초기화가 제한된 유형의 static 및 const 멤버로 제한되었습니다.
역사적으로 이러한 제한은 링커 규칙을 위반하는 객체 선언의 다중 정의를 피해야 하는 필요성에서 비롯되었습니다. 그러나 C 11에서는 컴파일러가 이러한 복잡성을 해결하는 부담을 떠맡아 유연한 클래스 내 초기화를 가능하게 합니다.
이러한 변경으로 정적 및 const 멤버에 대한 제한이 없어졌을 뿐만 아니라 비 멤버로 기능이 확장되었습니다. -정적 멤버. 비위임 생성자는 이제 중괄호 또는 동등 초기화를 사용하여 비정적 멤버를 초기화할 수 있습니다.
또한 C 11 표준의 섹션 9.4.2에서는 다음을 사용하여 비상수 정적 멤버의 클래스 내 초기화를 허용합니다. constexpr 지정자.
이러한 변화의 기본 메커니즘은 컴파일러가 내부적으로 정의의 잠재적 중복을 처리한다는 것입니다. 컴파일러는 실제 정의가 하나만 존재하도록 보장하므로 링커는 직접적인 영향을 받지 않습니다.
이러한 완화는 더 많은 유연성을 제공하지만 프로그래머가 고려해야 할 추가적인 미묘한 차이가 발생했습니다. 단일 멤버에 대해 여러 이니셜라이저가 지정된 경우 어떤 이니셜라이저가 우선적으로 적용되는지를 결정하는 규칙이 정의됩니다. 기본이 아닌 생성자가 대체 값을 제공하는 경우 클래스 내 초기화를 재정의합니다.
전반적으로 C 11의 클래스 내 초기화 도입으로 코드 가독성이 향상되고 추가 초기화 코드의 필요성이 감소합니다. 객체 구성에 대한 보다 일관된 접근 방식을 제공합니다.
위 내용은 클래스 내 초기화는 C 11 개체 구성을 어떻게 변환합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!