C++ 在以下用例中使用boost::optional的好处?
这是一个非常基本的问题。在以下场景中使用boost::optional是否有任何好处:C++ 在以下用例中使用boost::optional的好处?,c++,boost,boost-optional,C++,Boost,Boost Optional,这是一个非常基本的问题。在以下场景中使用boost::optional是否有任何好处: int somefunction(boost::optional<const Param&> value = getDefaultParam()){ return value->dosomething(); } 这是针对我知道我正在将Param对象初始化为默认值的特定情况。对API或API的客户端使用boost::optional on Param有什么好处吗?首先,这是不
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
这是针对我知道我正在将Param对象初始化为默认值的特定情况。对API或API的客户端使用boost::optional on Param有什么好处吗?首先,这是不好的:
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
编辑:在这个简单的案例中,可能不值得引入可选的。如果您这样做:
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
。首先,这是不好的:
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
编辑:在这个简单的案例中,可能不值得引入可选的。如果您这样做:
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
。首先,这是不好的:
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
编辑:在这个简单的案例中,可能不值得引入可选的。如果您这样做:
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
。首先,这是不好的:
int somefunction(boost::optional<const Param&> value = getDefaultParam()){
return value->dosomething();
}
编辑:在这个简单的案例中,可能不值得引入可选的。如果您这样做:
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
可能是合适的。否。只需执行最后一项。getDefaultParam
返回什么?如果它返回一个参数
,那么#2将不会非常正确(我不确定boost
是否允许它编译,但它不会工作)。通常,boost::optional
可以替换为Param const*
,因为boost::optional
是一个不可重置的空引用。。。Param const*
也是如此。只需执行最后一个操作。getDefaultParam
返回什么?如果它返回一个参数
,那么#2将不会非常正确(我不确定boost
是否允许它编译,但它不会工作)。通常,boost::optional
可以替换为Param const*
,因为boost::optional
是一个不可重置的空引用。。。Param const*
也是如此。只需执行最后一个操作。getDefaultParam
返回什么?如果它返回一个参数
,那么#2将不会非常正确(我不确定boost
是否允许它编译,但它不会工作)。通常,boost::optional
可以替换为Param const*
,因为boost::optional
是一个不可重置的空引用。。。Param const*
也是如此。只需执行最后一个操作。getDefaultParam
返回什么?如果它返回一个参数
,那么#2将不会非常正确(我不确定boost
是否允许它编译,但它不会工作)。通常,boost::optional
可以替换为Param const*
,因为boost::optional
是一个不可重置的空引用。。。参数常量*
也是如此。