函数重载与函数变量初始化

时间:2013-06-22 19:22:54

标签: c++ function variables overloading

我想知道哪些代码在一般条件下效果更好,以及它们之间是否存在任何相关差异......

第一个案例

float x;

float foo ( float A, float B, float x = x)
{
     // do stuff with A, B, x ...
}

第二案

float x;

float foo ( float A, float B, float x)
{
     // do stuff with A, B, x ...
}
float foo ( float A, float B)
{
     // do stuff with A, B, x ...
}

1 个答案:

答案 0 :(得分:1)

默认论证是一种祝福和诅咒;它们可以减少构造函数的重复 - 这本身就是导致错误的原因。 C ++ 11在某种程度上解决了这个问题。

不幸的是,它们也意味着在重构代码时通常需要更多的努力,尤其是当你积累了相同指纹的越来越多的变体时。

void someFunc(int count, void* ptr=nullptr, int count=1);

成为

void someFunc(int count, bool hasPtr=true, void* ptr=nullptr, int count=1);

会导致人们实际填写所有3个参数的问题。

someFunc(10, p, 0)

将成功匹配

someFunc(/*count=*/10, /*hasPtr=*/true, /*ptr*/=NULL, /*count*/=1)

因此,您需要做一些额外的工作才能记住解决这个问题。我的经验是,其他程序员经常与这种变化发生冲突,随之而来的是崩溃/行为错误。