c ++默认参数值

时间:2012-04-23 14:16:56

标签: c++ default default-value

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

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

,电话是

funcApply(param);

在函数体中,我测试第二个参数expr是否为NULL,然后进行累加。这个电话会表现得像预期的那样,还是行为不端?

谢谢和问候。

2 个答案:

答案 0 :(得分:2)

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

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

当然,如果您有类似#define QString char*的内容,那么expr将为NULL,但我怀疑您是否拥有该内容。

答案 1 :(得分:0)

  

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

出于某种原因,一旦给出,您将不被允许重复默认参数。如果头文件中有默认值,例如:

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

实现不得重复,但应该像

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

如果您实际测试expr的{​​{1}}参数并执行两项不同的操作,那么使用两个执行这些“不同的事情”的单独函数可能会更好

NULL

并避免此问题。