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