我有一个在union中使用的类,因此不能有(非平凡的)构造函数。我需要创建一个类的const实例,可以这样做吗?
即:
class Foo {
// no constructors...
private:
int i;
};
union {
Foo foo;
Bar bar;
} FooBar;
const Foo defaultFoo = ???
答案 0 :(得分:2)
是的,您可以从函数的结果中复制构造它:
static Foo configureDefaultFoo()
{
Foo f; // not const
f.setI(42); // call non-const member functions
return f;
}
const Foo defaultFoo = configureDefaultFoo();
请注意,虽然这会导致对象为const
,但它是动态初始化而不是静态的,因此它可能会受到静态初始化顺序失败的影响(如果调用非平凡的构造函数,情况也是如此,只有聚合初始化才能避免惨败。