>백엔드 개발 >C++ >C에서 비정적 데이터 멤버의 초기화 순서는 무엇입니까?

C에서 비정적 데이터 멤버의 초기화 순서는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 10:51:16774검색

What's the Initialization Order of Non-Static Data Members in C  ?

비정적 데이터 멤버의 초기화 순서

이 시나리오에서는 두 개의 비정적 데이터 멤버 a와 b가 선언되었습니다. 일반적인 질문이 생깁니다. X의 생성자가 다음과 같을 때 이러한 데이터 멤버는 어떤 순서로 초기화됩니까? 호출되었습니까?

이 질문에 답하기 위해 클래스 멤버의 초기화 순서를 설명하는 C 표준의 섹션 12.6.2를 살펴보겠습니다.

5 Initialization shall proceed in the following order:
-- First, and only for the constructor of the most derived class as described below, virtual base classes shall be initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes...
-- Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list...
-- Then, nonstatic data members shall be initialized in the order they were declared in the class definition...
-- Finally, the body of the constructor is executed...

이 규칙에 따라 순서는 a와 b의 초기화 여부는 클래스 정의 내 배치에 의해서만 결정됩니다. a가 b보다 우선하므로 먼저 초기화됩니다. 이는 생성자 본문 내에서 명시적으로 지정된 멤버 초기화 순서와 관계없이 적용됩니다.

따라서 이 경우 X의 생성자가 호출될 때 A의 생성자가 B의 생성자보다 먼저 호출됩니다.

위 내용은 C에서 비정적 데이터 멤버의 초기화 순서는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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