我想知道哪些代码在一般条件下效果更好,以及它们之间是否存在任何相关差异......
第一个案例
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 ...
}
答案 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)
因此,您需要做一些额外的工作才能记住解决这个问题。我的经验是,其他程序员经常与这种变化发生冲突,随之而来的是崩溃/行为错误。