【发布时间】:2017-07-14 19:57:23
【问题描述】:
我有一个在联合中使用的类,因此不能有 (non-trivial) 构造函数。我需要创建一个类的 const 实例,可以这样做吗?
即:
class Foo {
// no constructors...
private:
int i;
};
union {
Foo foo;
Bar bar;
} FooBar;
const Foo defaultFoo = ???
【问题讨论】:
-
从 C++11 标准开始,您可以拥有具有非平凡构造函数的对象实例。参见例如this
unionreference for details. -
不幸的是,我使用的是旧版本的 C++,它不支持联合中的构造函数。
-
成员必须是私有的吗?
-
我绝对更喜欢私人会员......实际上它是一个相当大而复杂的类......
-
你可以有一个返回
Foo实例的静态成员函数。没有显式构造函数意味着您仍然应该使用编译器提供的复制构造函数。static Foo createFoo(int i) { Foo f; f.i = i; return f; } ... const Foo defaultFoo = Foo::createFoo(1234);
标签: c++ constructor c++03