2011-10-03 6 views
1

내가이 같은 일부 코드가 말 :생성자 위임은 비 정적 데이터 멤버 초기화와 어떻게 상호 작용합니까?

class Foo 
{ 
public: 
    Foo(int v) : value(v) {} 
    Foo() : Foo(42) {} 
private: 
    int value = 666; 
}; 

기본 ctor에 42 또는 666에 value를 설정합니까? 나는 그것이 명백한 요구이기 때문에 나는 42를 희망 할 것이지만 나는 다른 방법도 상상할 수있다.

상속은 어떨까요?

class Base 
{ 
public: 
    Base() { } 
    virtual ~Base() { } 
    virtual int f() = 0; 
}; 

class Bar : public Base 
{ 
public: 
    Bar(int _i) : Base(), i(_i) { } 
    Bar() : Bar(-1) { } 
    virtual ~Bar() { } 
    virtual int f() { } 
private: 
    int i = 777; 
}; 

다시 말하지만, 나는 i == -1을 다시 원합니다.

감사합니다.

답변

3

클래스 멤버 멤버 이니셜 라이저는 단지 기본값입니다. 생성자의 멤버 초기화 목록이 멤버를 초기화하면 항상 우선 순위를 갖습니다.

이것은 C++ 11 스펙에서 12.6.2p9로 지정됩니다.

관련 문제