2011-10-03 25 views
1

說我有一些像這樣的代碼:構造函數委託如何與非靜態數據成員初始化交互?

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

是否默認的構造函數設置value至42或666?我想我會希望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

in class body member initializer只是一個默認值。如果構造函數的成員初始化程序列表也是初始化成員,則始終優先。

這由C++ 11規範中的12.6.2p9規定。

相關問題