C ++将boost :: optional <double>转换为double </double>

时间:2014-12-09 17:01:56

标签: c++ boost double optional

在C ++中是否可以将boost :: optional转换为double?

boost::optional<double> time;
double realTime;

realTime = time;

最后一行给我一个错误,我

"Assigning to 'double' from incompatible type boost::optional<double>"

2 个答案:

答案 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

这很危险,因为大多数默认值都存在问题(03NaN+inf-inf都值得考虑。{{ 1}}因为至少它不是其他人之一。)

一旦您知道可选项有值,3或一元.get()就会提取它。在布尔上下文中评估operator*将告诉您它是否为空。