初始化常量C++而不构造
问题描述:
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 = ???
答
是的,你可以从一个函数的结果复制构造它初始化不是静态的,所以它可以从静态初始化顺序的悲剧遭遇(同样会是真实的,如果调用一个不平凡的构造函数,只有集合初始化将避免惨败)。
既然可以具有非平凡构造对象的实例的C++ 11标准。见例如[这个'union'参考资料](http://en.cppreference.com/w/cpp/language/union)。 –
不幸的是,我使用的是C++,它不支持在构造函数工会的旧版本。 – blackghost
会员必须是私人的吗? – NathanOliver