1

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

第一种情况

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 ...
}
4

1 回答 1

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)

所以你将不得不做一些额外的工作来记住解决这个问题。我的经验是,其他程序员经常与这种变化发生冲突,并且随之而来的是令人讨厌的崩溃/行为错误。

于 2013-06-22T19:46:55.280 回答