C++中的默认引用参数



我有类mizer

class mizer {
  ...
  public:
    ...
    void getDeviation( vector<double>&, vector<int>& )
...
};

随着实现:

void mizer::getDeviation( vector<double>& best_mass, vector<int>& best_comb ){
   ...
}

但有时我不想提供第二个论点best_comb.所以我想设置默认值或其他东西:

void mizer::getDeviation( ..., vector<int>& best_comb = default )

我试过了:

static vector<int> def();
...
void mizer::getDeviation( ..., vector<int>& best_comb = def )

但它不起作用:

/minimizer/mizer.C:69:69: error: 
non-const lvalue reference to   type 'vector<int>'  cannot bind to a value of unrelated type 'vector<int> ()'double mizer::getDeviation( vector<double>&  best_mass, vector<int>& best_comb=def ){

如何设置默认vector引用变量?

static vector<int> def();声明

一个返回vector<int>的静态函数def。 使用 static vector<int> def{};static vector<int> def; 代替

函数重载怎么样?

您可以使重载函数只接受一个参数,然后使用空虚拟向量来调用双参数函数。

您可以使用

方法重载,如@Someprogrammerdude建议的那样:

class mizer {
  ...
  public:
    ...
    void getDeviation( vector<double>& );
    void getDeviation( vector<double>&, vector<int>& );
    ...
};
void mizer::getDeviation( vector<double>& best_mass )
{
   vector<int> ignored; 
   getDeviation( best_mass, ignored );
}
void mizer::getDeviation( vector<double>& best_mass, vector<int>& best_comb )
{
   ...
}

mizer m;
vector<double> mass;
m.getDeviation( mass );

mizer m;
vector<double> mass;
vector<int> comb;
m.getDeviation( mass, comb );

但这仍然会为best_comb的内容分配内存,即使调用方不想要它。

或者,可以将可选参数设置为指针而不是引用:

class mizer {
  ...
  public:
    ...
    void getDeviation( vector<double>&, vector<int>* = nullptr );
    ...
};
void mizer::getDeviation( vector<double>& best_mass, vector<int>* best_comb )
{
   ...
   if (best_comb) best_comb->push_back(...);
   ...
}

mizer m;
vector<double> mass;
m.getDeviation( mass );

mizer m;
vector<double> mass;
vector<int> comb;
m.getDeviation( mass, &comb );

现在,除非调用方需要,否则不会为best_comb的内容分配内存。

你的函数 def(( 可能总是返回相同的值。

所以,我认为你需要使用"#define"作为默认和参考向量。

最新更新