【问题标题】:Conditional passing of a default argument to a function (using the '?' operator)将默认参数有条件地传递给函数(使用“?”运算符)
【发布时间】:2020-05-31 13:24:24
【问题描述】:

有一个函数声明为

CalculateTimeSilence(float SilenceThresholdOverride = -1.f);

有没有办法调用它,以便我可以利用条件“?”运算符来选择 SilenceThresholdOverride 的值还是保留默认值

用伪代码表示:

CalculateTimeSilence(bUseOverride ? OverrideValue : default);

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

谢谢, 塞巴斯蒂安

【问题讨论】:

  • bUseOverride ? CalculateTimeSilence(OverrideValue) : CalculateTimeSilence(); 怎么样?
  • @songyuanyao 真的。但是,如果函数有很多其他参数,则可能存在不那么漂亮的场景。无论如何,我只是好奇是否存在这样的东西,而不是真正需要它。谢谢!
  • 我认为没有。默认参数仅在不向函数传递参数时使用,即CalculateTimeSilence()的形式。

标签: c++ conditional-operator default-arguments


【解决方案1】:

当你在没有指定参数的情况下调用函数时,默认会在调用处添加,所以当你调用时

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);

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多