在没有构造函数的情况下初始化const c ++类

时间:2017-07-14 19:57:24

标签: c++ constructor c++03

我有一个在union中使用的类,因此不能有(非平凡的)构造函数。我需要创建一个类的const实例,可以这样做吗?

即:

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

 union {
     Foo foo;
     Bar bar;
 } FooBar;

 const Foo defaultFoo = ???

1 个答案:

答案 0 :(得分:2)

是的,您可以从函数的结果中复制构造它:

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

const Foo defaultFoo = configureDefaultFoo();

请注意,虽然这会导致对象为const,但它是动态初始化而不是静态的,因此它可能会受到静态初始化顺序失败的影响(如果调用非平凡的构造函数,情况也是如此,只有聚合初始化才能避免惨败。