【问题标题】:c++ default parameters valuec++ 默认参数值
【发布时间】:2012-05-04 04:04:51
【问题描述】:

我想确保这个方法调用是正确的。我有三个参数,一个默认为空 QString。

double funcApply(double* param, QString expr=NULL);

电话是

funcApply(param);

在函数体中,我测试第二个参数 expr 是否为 NULL,然后继续进行。此调用会按预期运行,还是会出现异常?

感谢和问候。

【问题讨论】:

  • 你真的试过运行它吗?
  • 编译时出现错误:“重新定义默认参数”和“重载函数模棱两可”
  • @PéterTörök:运行它可能不会给出正确的答案。也许提问者对非 POD 的默认参数值是否有效或产生未定义的行为特别感兴趣。
  • @phresnel,当然这可能不是决定性的,但它仍然是包含在帖子中的重要信息。

标签: c++ default default-value


【解决方案1】:

这取决于您期望它的行为方式。

从技术上讲,expr 不会是 NULL,因为它不是指针,但它的内容将为空。 (假设你的意思是QString)。

当然,如果你有 #define QString char* 之类的东西,那么 expr 将是 NULL,但我怀疑你有这个。

【讨论】:

  • 对于QStrings,有一个特殊的模式,你可以用空指针构造它。见the documentation。
  • @leftaroundabout 这是我发布的链接。正是我所说的——但 expr 不是 NULL。不可能,因为它不是指针。
  • 是的,但空字符串与空字符串不同,这就是我的观点。 (我编辑了该部分的链接)。
  • 好的,那么它会工作是有默认的 QString expr = QString::number(0) 并测试 expr 是否等于 QString::number(0)?如果不是用户给定的,我不在乎 expr 的值,我只想能够以一种或另一种方式测试该值。
  • @dlib 或者您可以默认为QString expr = QString() 并使用isNull 进行测试。
【解决方案2】:

我在编译时出现错误“重新定义默认参数”和“对重载函数的模糊调用”

由于某种原因,一旦给出默认参数,就不允许您重复它。如果你的头文件中有默认值,比如:

double funcApply(double* param, QString expr=NULL);

实现一定不能重复,而是类似

double funcApply(double* param, QString expr /*=NULL*/)
{
    // do something
}

如果您实际测试 NULL 的 expr 参数并执行两件不同的事情,您最好使用两个单独的函数来执行这些“不同的事情”

 double funcApply(double* param);
 double funcApply(double* param, QString expr);

并避免这个问题。

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 2012-10-11
    • 2012-07-05
    • 2010-12-01
    • 1970-01-01
    • 2021-07-20
    • 2014-02-10
    • 2011-12-28
    相关资源
    最近更新 更多