2017-07-14 72 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

是的,你可以从一个函数的结果复制构造它初始化不是静态的,所以它可以从静态初始化顺序的悲剧遭遇(同样会是真实的,如果调用一个不平凡的构造函数,只有集合初始化将避免惨败)。