我有一个带有一个参数的函数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循环,将第一个代码段更改为更具设计可重用性。
答案 0 :(得分:1)
表现明智:没关系。对于大多数应用程序,编译器足够智能,可以生成在两种情况下都高效的代码。有些人可能会争辩说,在调用pop()
的情况下,第二个版本将生成一个额外的for
循环。实际上,这可以通过编译器进行简单优化。
就可读性而言,第二种肯定更具表现力。但最终它归结为偏好。选择您认为最适合您设计的那个,并记住不要进行预优化。