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

Initializing const c++ class without constructor

本文关键字:初始化 const c++ 情况下 构造函数      更新时间:2023-10-16

我有一个在联合中使用的类,因此不能有一个(非平凡的(构造函数。 我需要创建类的 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,但它是动态初始化而不是静态初始化,因此它可能会遭受静态初始化顺序的惨败(如果调用非平凡构造函数也是如此,只有聚合初始化才能避免惨败(。