默认参数或函数重载

时间:2014-01-19 01:16:42

标签: c++ overloading

我有一个带有一个参数的函数pop,它会从堆栈中弹出元素。我希望能够使用pop(),这将从顶部删除一个元素;和pop(any_number),它将从顶部弹出多个元素。有一件事让我对一个简单的实现细节感到好奇。

函数重载:

void pop() {
   if(!stack.empty())
     stack.pop();
}

void pop(int n) {
   for(int i = 0; i < n; ++i)
      pop();
}

函数默认参数:

void pop(int n = 1) {
    for(int i = 0; i < n; ++i)
      if(!stack.empty())
         stack.pop();
}

除了后者中的更简单的代码之外是否存在差异。使用第一个或第二个是否有优势?

编辑:通过使用pop函数替换带有范围的for循环,将第一个代码段更改为更具设计可重用性。

1 个答案:

答案 0 :(得分:1)

表现明智:没关系。对于大多数应用程序,编译器足够智能,可以生成在两种情况下都高效的代码。有些人可能会争辩说,在调用pop()的情况下,第二个版本将生成一个额外的for循环。实际上,这可以通过编译器进行简单优化。

就可读性而言,第二种肯定更具表现力。但最终它归结为偏好。选择您认为最适合您设计的那个,并记住不要进行预优化。