我有一个处理给定向量的函数,但如果没有给出,也可以自己创建这样的向量.
我看到这种情况有两种设计选择,其中一个函数参数是可选的:
将它设为指针并NULL默认设置为:
void foo(int i, std::vector<int>* optional = NULL) {
if(optional == NULL){
optional = new std::vector<int>();
// fill vector with data
}
// process vector
}
Run Code Online (Sandbox Code Playgroud)
或者有两个带有重载名称的函数,其中一个省略了参数:
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
}
Run Code Online (Sandbox Code Playgroud)
是否有理由选择一种解决方案而不是另一种?
我稍微偏爱第二个,因为我可以将向量作为const引用,因为它在提供时只能读取而不能写入.此外,界面看起来更干净(NULL不仅仅是一个黑客?).并且间接函数调用产生的性能差异可能会被优化掉.
然而,我经常在代码中看到第一个解决方案.除了程序员的懒惰之外,是否有令人信服的理由更喜欢它?