Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在以下用例中使用boost::optional的好处?_C++_Boost_Boost Optional - Fatal编程技术网

C++ 在以下用例中使用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有什么好处吗?首先,这是不

这是一个非常基本的问题。在以下场景中使用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();
}
编辑:在这个简单的案例中,可能不值得引入
可选的
。如果您这样做:

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
是一个不可重置的空引用。。。
参数常量*
也是如此。