Programing

생성자 초기화 목록 평가 순서

lottogame 2020. 4. 9. 07:58
반응형

생성자 초기화 목록 평가 순서


인수를 취하는 생성자가 있습니다. 나는 그것들이 나열된 순서대로 구성되었다고 가정했지만, 어떤 경우에는 반대로 구성되어 중단을 초래 한 것으로 보입니다. 인수를 되 돌리면 프로그램 중단이 중단되었습니다. 이것은 내가 사용하는 구문의 예입니다. 문제는이 경우 a_를 b_ 전에 초기화해야한다는 것입니다. 건설 순서를 보장 할 수 있습니까?

예 :

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

    OtherClass a_;
    AnotherClass b_;
};

클래스의 멤버 변수 선언 순서에 따라 다릅니다. 그래서 a_다음, 첫 번째가 될 것입니다 b_귀하의 예제에서 두 번째로 하나가 될 것입니다.


설명을 위해 표준을 인용하려면 :

12.6.2.5

초기화는 다음 순서로 진행됩니다.

...

  • 그런 다음 비 정적 데이터 멤버는 클래스 정의에서 선언 된 순서대로 초기화됩니다 (다시 mem-initializer의 순서에 관계없이).

...


이에 대한 표준 참조 는 이제 12.6.2 섹션 13.3으로 보입니다.

(13.3) — 그런 다음 정적이 아닌 데이터 멤버는 클래스 정의에서 선언 된 순서대로 초기화됩니다 (다시 mem-initializer의 순서에 관계없이).

참고 URL : https://stackoverflow.com/questions/1242830/constructor-initialization-list-evaluation-order

반응형