这是一个非常基本的问题。在以下情况下使用boost :: optional有什么好处:
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
要么
int somefunction(boost::optional<const Param&> value){
if (!value)
value = getDefaultParam();
return value->dosomething();
}
而不是仅仅这样做:
int somefunction(const Param& value = getDefaultParam()){
return value.dosomething();
}
这是针对特定情况的,其中我知道我正在将Param对象初始化为默认值。在API或API客户端的Param上使用boost :: optional是否有任何好处?
最佳答案
首先,这很糟糕:
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
可以用
someFunction
调用boost::none
,在这种情况下,尝试访问其值将引发异常。其次,如果您有
boost::optional<const Param&>
,则将提供一个API以获取其值或默认值:boost::optional<const Param&> value = ...;
value.value_or(getDefaultParam()).doSomething();
编辑:在这种简单的情况下,可能不值得引入
optional
。如果您执行以下操作:int someFunc(const Param& value = getDefaultParam())
{
return value.doSomething();
}
// Elsewhere...
int x = someCondition ? someFunc(abc) : someFunc();
这里
optional
确实没有意义。当然,像这样的简单事情,someFunc
也可能不需要太多:int x = (someCondition ? abc : getDefaultParam()).doSomething();
但是,如果需要长期存储/跟踪值是否可用,则
boost::optional
可能是合适的。关于c++ - 在以下用例中使用boost::optional有好处吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29108173/