有条件地将默认参数传递给函数(使用"?"运算符)

Conditional passing of a default argument to a function (using the '?' operator)

本文关键字:使用 运算符 函数 默认 参数传递 有条件      更新时间:2023-10-16

有一个函数声明为

CalculateTimeSilence(float SilenceThresholdOverride = -1.f);

有没有办法调用它,以便我可以利用条件"?"运算符为SilenceThresholdOverride选择一个值或将其保留为默认值

表示为伪代码:

CalculateTimeSilence(bUseOverride ? OverrideValue : default);

,其中"default"将被编译器替换为参数在其声明中默认为的值(在本例中为 -1.f(。 如果有这样的方法,它将不再需要匹配默认值或编写 If-Else 语句。

谢谢 塞巴斯蒂安

当您调用函数而不指定参数时,则会在调用站点添加默认值,因此当您调用时

CalculateTimeSilence();

然后你实际上是在打电话

CalculateTimeSilence(-1.f);

没有default或类似的机制来获取默认参数,但您可以"手动"执行此操作

const float default_value = -1.f;
CalculateTimeSilence(float SilenceThresholdOverride = default_value);

然后您可以根据需要调用它:

CalculateTimeSilence(bUseOverride ? OverrideValue : default_value);

但是,虽然条件运算符有时会派上用场,但它通常会混淆代码并使其难以阅读。在这种情况下,我可能宁愿写

auto x = bUseOverride ? OverrideValue : default_value;
CalculateTimeSilence(x);