>백엔드 개발 >C++ >비정적 멤버 이니셜라이저가 있는 C 클래스가 집계가 될 수 있나요?

비정적 멤버 이니셜라이저가 있는 C 클래스가 집계가 될 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-10 03:58:02766검색

Can a C   class with non-static member initializers be an aggregate?

비정적 멤버 이니셜라이저가 있는 클래스에 대한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.