分配结构的可选成员的最佳方式是什么? 例如,我有一个结构:
struct B{
public:
int x;
}
struct A{
public:
boost::optional<B> b;
};
void foo(){
A a;
a.b.x = 10; //Runtime exception because a.b is not initialized.
}
一个选项是定义临时B结构并将其分配给A:
void foo(){
A a;
B tmp;
a.b = tmp;
a.b.x = 10; //OK.
}
或:
void foo(){
A a;
a.b = B();
a.b.x = 10; //OK.
}
有更明确的方法吗?
答案 0 :(得分:5)
除了在使用之前初始化它别无选择。如果你不这样做,你将会有一个断言失败,导致终止。
但是如果你问的是如何初始化它,那么它们就有很多:
a.b = B{10}
因为它是POD类型。a.b = B()
就像你一样(总是工作,不仅仅是POD类型)。a.b = B(10)
一样。但是,您仍然需要创建一个对象并分配给它。因此,您可以隐式或显式创建对象,但必须这样做。emplace()
方法,为您做同样的事情:a.b.emplace()
。