在C ++中是否可以将boost :: optional转换为double?
即
boost::optional<double> time;
double realTime;
realTime = time;
最后一行给我一个错误,我
"Assigning to 'double' from incompatible type boost::optional<double>"
答案 0 :(得分:3)
当然是,但你需要检查是否给出了time
。
if (time){
/*this means that the optional parameter was provided*/
realTime = *time;
}
Boost使用取消引用运算符从可选项中提取值,并使用更多运算符重载技巧使if (time)
成为&#34;提供的令人满意的测试&#34 ;
答案 1 :(得分:0)
如果您知道在time
丢失的情况下要设置optional
的值,opt.get_value_or(3)
将返回opt
的值,如果没有值将返回3
。
这很危险,因为大多数默认值都存在问题(0
,3
,NaN
,+inf
,-inf
都值得考虑。{{ 1}}因为至少它不是其他人之一。)
一旦您知道可选项有值,3
或一元.get()
就会提取它。在布尔上下文中评估operator*
将告诉您它是否为空。