2017-07-14 95 views
2

I類具有被在聯合使用,因此不能有(非平凡)構造一個類。我需要創建一個類的const實例,可以這樣做嗎?初始化常量C++而不構造

即:

static Foo configureDefaultFoo() 
{ 
    Foo f; // not const 
    f.setI(42); // call non-const member functions 
    return f; 
} 

const Foo defaultFoo = configureDefaultFoo(); 

注意的是,雖然這會導致一個對象,它是const,它是動態的:

class Foo { 
    // no constructors... 
    private: 
     int i; 
}; 

union { 
    Foo foo; 
    Bar bar; 
} FooBar; 

const Foo defaultFoo = ??? 
+1

既然可以具有非平凡構造對象的實例的C++ 11標準。見例如[這個'union'參考資料](http://en.cppreference.com/w/cpp/language/union)。 –

+0

不幸的是,我使用的是C++,它不支持在構造函數工會的舊版本。 – blackghost

+1

會員必須是私人的嗎? – NathanOliver

回答

2

是的,你可以從一個函數的結果複製構造它初始化不是靜態的,所以它可以從靜態初始化順序的悲劇遭遇(同樣會是真實的,如果調用一個不平凡的構造函數,只有集合初始化將避免慘敗)。