我有一个处理给定向量的函数,但如果没有给出,也可以自己创建这样的向量。
对于这种情况,我看到了两种设计选择,其中函数参数是可选的:
将其设为指针并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
不仅仅是黑客?)。间接函数调用导致的性能差异可能已被优化掉。
然而,我经常在代码中看到第一个解决方案。除了程序员的懒惰之外,还有令人信服的理由喜欢它吗?