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

Initializing const c++ class without constructor

我有一个在联合中使用的 class,因此不能有一个 (non-trivial) 构造函数。我需要创建 class 的 const 实例,可以这样做吗?

即:

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

 union {
     Foo foo;
     Bar bar;
 } FooBar;

 const Foo defaultFoo = ???

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

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

const Foo defaultFoo = configureDefaultFoo();

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