在可选结构成员中赋值成员
Assigning member in optional structure memeber
为结构体的可选成员赋值的最佳样式是什么?例如,我有一个结构体:
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.
}
是否有更清晰的方法来做到这一点?
您别无选择,只能在使用它之前初始化它。如果你不这样做,你将有一个断言失败,这将导致终止。
但是如果你问如何初始化它,有很多方法:
-
a.b = B{10}
为pod型。 -
a.b = B()
,就像你已经做的那样(总是工作,不仅适用于pod类型)。 - 创建一个类似
a.b = B(10)
的构造函数。但是,你仍然需要创建一个对象并给它赋值。因此,您可以隐式或显式创建对象,但必须这样做。 - 在boost 1.56中,作为@n。我告诉你,这里有一个
emplace()
方法可以为你做同样的事情:a.b.emplace()
。
相关文章:
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 清除具有已删除赋值运算符的成员的类实例
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 静态成员函数赋值而不带返回语句
- 我们可以直接为任何数据成员赋值. 为什么要使用构造函数?
- 通过迭代器为映射的成员赋值
- 为什么不能为基类的成员赋值?
- 如何使用其他函数返回的值为结构体成员赋值
- C++:为类中对象的数据成员赋值
- 如何为所有结构成员赋值
- 使用双指针为结构的成员赋值
- C++:成员赋值如何工作
- 用方法代替成员赋值
- 在c++中快速将基对象的所有成员赋值给派生对象
- 返回值函数中结构成员赋值的额外拷贝
- 将pair的成员赋值给变量
- c++在使用类方法给成员赋值时每次都会崩溃
- 成员赋值笛卡尔类 c++
- c++扑克游戏中的数据成员赋值