【发布时间】:2010-10-16 18:00:18
【问题描述】:
我有一个处理给定向量的函数,但如果没有给出,也可以自己创建这样的向量。
对于这种情况,我看到了两种设计选择,其中函数参数是可选的:
将其设为指针并默认设为NULL:
void foo(int i, std::vector<int>* optional = NULL) {
if(optional == NULL){
optional = new std::vector<int>();
// fill vector with data
}
// process vector
}
或者有两个具有重载名称的函数,其中一个省略了参数:
void foo(int i) {
std::vector<int> vec;
// fill vec with data
foo(i, vec);
}
void foo(int i, const std::vector<int>& optional) {
// process vector
}
是否有理由选择一种解决方案而不是另一种?
我更喜欢第二个,因为我可以将向量设为const 引用,因为它在提供时只能读取,不能写入。此外,界面看起来更干净(NULL 不只是一个 hack 吗?)。并且间接函数调用导致的性能差异可能被优化掉了。
然而,我经常在代码中看到第一个解决方案。除了程序员的懒惰之外,还有令人信服的理由喜欢它吗?
【问题讨论】:
标签: c++ function parameters null overloading