我有一个包含矢量作为数据成员的类。
当调用构造函数时,我希望复制构造函数初始化所述数据成员,而不是默认初始化(到空向量对象),因此我使用初始化列表。
#include <vector>
using namespace std;
struct MyStruct {
vector<double> V;
vector<double> A;
vector<double> B;
MyStruct (vector<double> vee, vector< vector <double> > mat);
};
MyStruct::MyStruct (vector<double> vee, vector< vector <double> > mat)
: V(vee),
A(mat[0]),
B(mat[1])
{
/* Rest of the constructor here*/
}
我的问题是:
这样做是否会提高效率,而不允许默认初始化和使用其他方法?例如做
V.assign(vee)
在进行默认初始化或列表初始化之前,有没有办法让构造函数返回检查和错误/消息?
我想要ctor例如如果vector<vector<double>>
&gt;的大小停止2,原因很明显,否则上面会产生一个seg错误,我希望在调用构造函数时这个过程是自动化的。
答案 0 :(得分:1)
我想如果你想避免异常,你可以做这样的事情。它使用三元运算符来检查vector
的大小,如果vector
中没有mat
,则使用空#include <vector>
using namespace std;
struct MyStruct {
vector<double> V;
vector<double> A;
vector<double> B;
MyStruct (vector<double> vee, vector< vector <double> > mat);
};
MyStruct::MyStruct (vector<double> vee, vector< vector <double> > mat)
: V(vee),
A(mat.size() < 1 ? vector<double>():mat[0]),
B(mat.size() < 2 ? vector<double>():mat[1])
{
// If you then want to throw your own exception:
if(mat.size() < 2)
throw std::range_error("accessing mat");
// alternatively set a flag
if(mat.size() < 2)
this->good = false;
}
进行初始化。
{{1}}