相关疑难解决方法(0)

可选函数参数:使用默认参数(NULL)或重载函数?

我有一个处理给定向量的函数,但如果没有给出,也可以自己创建这样的向量.

我看到这种情况有两种设计选择,其中一个函数参数是可选的:

将它设为指针并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不仅仅是一个黑客?).并且间接函数调用产生的性能差异可能会被优化掉.

然而,我经常在代码中看到第一个解决方案.除了程序员的懒惰之外,是否有令人信服的理由更喜欢它?

c++ parameters null overloading function

41
推荐指数
5
解决办法
6万
查看次数

标签 统计

c++ ×1

function ×1

null ×1

overloading ×1

parameters ×1