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

Check parameters passed to constructor when using initialization lists - C++

我有一个 class 包含向量作为数据成员。

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

#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*/ 
}

我的问题是:

我希望 ctor 例如如果 vector<vector<double>> > 2 的大小,则停止,原因很明显,否则上面会产生段错误,我希望在调用构造函数时自动执行此过程。

我想如果您想避免异常,您可以这样做。它使用三元运算符检查 vector 的大小,如果 mat.

中不存在,则使用空 vector 进行初始化
#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;
}