检查使用初始化列表时传递给构造函数的参数 - C ++

时间:2015-04-20 01:18:17

标签: c++ vector constructor

我有一个包含矢量作为数据成员的类。

当调用构造函数时,我希望复制构造函数初始化所述数据成员,而不是默认初始化(到空向量对象),因此我使用初始化列表。

#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错误,我希望在调用构造函数时这个过程是自动化的。

1 个答案:

答案 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}}