>백엔드 개발 >C++ >C 멤버 이니셜라이저 목록에서 초기화 순서를 보장하는 방법은 무엇입니까?

C 멤버 이니셜라이저 목록에서 초기화 순서를 보장하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-14 09:12:12792검색

How to Guarantee Initialization Order in C   Member Initializer Lists?

멤버 이니셜라이저 목록의 초기화 순서

C에서 생성자는 종종 멤버 이니셜라이저 목록을 사용하여 멤버 변수를 초기화합니다. 그러나 이러한 변수가 초기화되는 순서는 혼란스러울 수 있습니다.

다음 생성자를 고려하세요.

class A {
public:
    OtherClass a_;
    AnotherClass b_;

    A(OtherClass o, string x, int y)
    : a_(o)
    , b_(a_, x, y) {}
};

문제:

원래는 변수는 초기화 목록에 나열된 순서대로 초기화되었다고 가정합니다: a_ 먼저, 그 다음 b_. 그런데 변수가 역순으로 초기화되고 있는 것이 밝혀지면서 문제가 발생했습니다.

질문:

이를 보장하기 위해 초기화 순서를 어떻게 제어할 수 있습니까? a_는 이전에 초기화되었습니다. b_?

답변:

초기화 순서는 클래스의 데이터 멤버 선언 순서에 따라 다릅니다. 이 예에서는 a_가 b_보다 먼저 선언되었으므로 먼저 초기화됩니다.

따라서 원하는 초기화 순서를 보장하려면 클래스 정의 내에서 데이터 멤버를 올바른 순서로 선언하는 것이 중요합니다.

위 내용은 C 멤버 이니셜라이저 목록에서 초기화 순서를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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