>백엔드 개발 >C++ >C 11에서 지정된 초기화 목록이 제외된 이유는 무엇입니까?

C 11에서 지정된 초기화 목록이 제외된 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-27 22:46:11233검색

Why Were Designated Initializer Lists Excluded from C  11?

C 11의 지정 초기화 목록 제외

C 11은 C99에 있는 기능인 지정 초기화 목록에 대한 지원이 부족합니다. 이러한 누락으로 인해 왜 이렇게 편리한 구문이 최신 표준에 포함되지 않았는지 궁금해하는 일부 개발자는 당황스러워했습니다.

이유

C 표준 위원회는 다음과 같은 제안을 지속적으로 거부해 왔습니다. 지정된 초기화 목록을 언어에 통합합니다. 그 근거는 몇 가지 고유한 문제에서 비롯됩니다.

평가 순서 불확정성:

C99에서 지정된 이니셜라이저 하위 표현식에 대한 평가 순서는 불확실하게 순서가 지정됩니다. 이로 인해 특히 초기화에 상호 작용 기능이나 부작용이 포함될 때 예상치 못한 동작이 발생할 수 있습니다.

호환성 위반:

C가 불확실한 평가로 지정된 초기화 목록을 구현하는 경우 일반적으로 일관된 평가를 제공하는 기존 C99 구현과의 호환성이 손상됩니다.

타당성 문제:

표준 위원회는 엄격한 초기화 목록 요구 사항을 충족하는 방식으로 지정 초기화 목록을 구현하는 타당성에 대해 반복적으로 의구심을 표명했습니다. C(11.6.4[dcl.init.list]4).

지정자 C 20의 제한 사항

지정된 이니셜라이저 목록은 C 11 및 C 17에서 제외되지만 C 20 표준은 결정성과 호환성을 보장하기 위해 제한 사항이 있는 부분 지원을 도입합니다. 이러한 제한 사항은 다음과 같습니다.

  • 초기화 순서대로 선언된 데이터 멤버만 지정할 수 있습니다.
  • 배열 및 중첩 초기화는 지원되지 않습니다.
  • 모두 또는 없음 데이터 멤버의 초기화는 다음과 같습니다.

결론

C 11에서 지정된 이니셜라이저 목록을 제외하는 것은 평가 순서 불확정성에 대한 우려로 인해 표준 위원회가 의도적으로 결정한 것입니다. 호환성 문제 및 구현 문제. 제한된 지원이 결국 C 20에 추가되었지만 C 표준은 계속해서 엄격한 초기화 순서를 적용하고 프로그램 정확성이나 이식성을 손상시킬 수 있는 예측할 수 없는 동작을 피하는 데 중점을 두고 있습니다.

위 내용은 C 11에서 지정된 초기화 목록이 제외된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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