C++ 在C++;,将函数与std::optional<;一起使用有意义吗;T>;参数,表示可选参数?

C++ 在C++;,将函数与std::optional<;一起使用有意义吗;T>;参数,表示可选参数?,c++,optional,C++,Optional,我知道可以使用如下可选参数实现函数: int someFunction(int A, int B = -1) { if (B != -1) { ... // If B given then do something } else { ... // If B not given then do something else } } 然而,我想利用同事推荐的std::optional。以下是我试图做的事情,但我遇到了错误: int some Func

我知道可以使用如下可选参数实现函数:

int someFunction(int A, int B = -1) {
   if (B != -1) {
       ... // If B given then do something
   } else { 
       ... // If B not given then do something else
   }
}
然而,我想利用同事推荐的std::optional。以下是我试图做的事情,但我遇到了错误:

int some Function(int A, std::optional<int> B) {
    if (B.has_value()) {
        ... // If B given then do something
    } else { 
        ... // If B not given then do something else
    }
}
intsome函数(inta,std::可选B){
如果(B.具有_值()){
…//如果给了B,那就做点什么
}否则{
…//如果B没有给出,那么做其他事情
}
}
问题是,在第一种方法中,我可以调用函数“Suth>代码>某个函数(5)< /Cord>,C++将实现我不使用可选参数。但是在第二个过程中,以相同的方式调用
someFunction(5)
会产生错误
函数调用的参数太少


我希望能够使用第二种方法调用函数,而不包括可选参数,这是否可能/推荐?

要按照您在这里想要的方式使用它,我相信您需要指定默认值
std::nullopt

int some Function(int A, std::optional<int> B = std::nullopt) {
    if (B.has_value()) {
        ... // If B given then do something
    } else { 
        ... // If B not given then do something else
    }
}
int一些函数(int A,std::optional B=std::nullopt){
如果(B.具有_值()){
…//如果给了B,那就做点什么
}否则{
…//如果B没有给出,那么做其他事情
}
}

这没有什么意义;正常的解决方案是一个额外的重载
intsomefunction(inta)

,可选的通常是表示值的存在/不存在(特别是作为返回),而默认参数是第一种情况下使用的参数。在这方面,它们是完全不同的概念。你能解释一下为什么它没有意义吗?在我看来,使用
std::optional B=std::nullopt
比使用
int B=-1
更“干净”,因为该函数仍然可以用
-1
调用,并且该函数将像未使用可选参数一样执行。@Minyc510-答案是建议使用两个重载:
int someFunction(int a)
intsomefunction(inta,intb)
@Minyc510:您不再有
b
的默认值。如果使用一个参数调用
函数
,则会选择另一个重载,而该重载甚至没有
B
参数。我明白了。在我的特殊情况下,这将需要一些代码复制,因此我选择了公认的答案,这将导致代码更干净。再说一次,至少对我来说是这样。