비정적 멤버 이니셜라이저가 있는 클래스에 대한 C 11 집계 초기화
C 11에서 클래스 또는 구조체는 다음과 같은 경우 집계로 간주됩니다. 사용자 정의 생성자 없음, 비정적 데이터 멤버에 대한 중괄호 또는 같음 이니셜라이저 없음, 비공개 또는 보호된 비정적 데이터 멤버 없음 등 특정 기준을 충족합니다.
그러나 표준 C 11에서는 비정적 멤버 이니셜라이저를 클래스나 구조체에 추가하면 상태가 집계로 변경됩니다. 이는 멤버 이니셜라이저가 사용자 정의 생성자와 유사하여 클래스나 구조체가 집계될 수 없기 때문입니다. 이러한 정의 변경으로 인해 예상치 못한 동작이 발생할 수 있습니다.
제공된 예에서:
struct A { int a = 3; int b = 3; }; A a{0,1}; // ???
클래스 A는 클래스 내 멤버 이니셜라이저가 있기 때문에 더 이상 집계로 간주되지 않습니다. 결과적으로 집계 초기화 A a{0,1}; 유효하지 않습니다.
이 동작은 C 14에서 수정되었습니다. 여기서는 비정적 멤버 이니셜라이저가 있어도 더 이상 클래스나 구조체가 집계되는 것을 방지하지 않습니다. 따라서 C 14에서는 A의 집합 초기화가 유효하다.
C 표준이 변경되었다는 점에 유의하는 것이 중요하며, 최신 버전의 표준을 확인하거나 호환되는 C를 사용하는 것이 필수적이다. 집계 초기화 및 비정적 멤버 이니셜라이저와 관련된 코드의 올바른 해석을 보장하기 위한 컴파일러 14 이상.
위 내용은 비정적 멤버 이니셜라이저가 있는 C 클래스가 집계가 될 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!