我有类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"作为默认和参考向量。