检查使用初始化列表时传递给构造函数的参数 - C++
Check parameters passed to constructor when using initialization lists - C++
我有一个包含向量作为数据成员的类。
调用构造函数时,我希望所述数据成员由复制构造函数初始化,而不是默认初始化(空矢量对象),因此我使用初始化列表。
#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)
有没有办法在进行默认初始化或列表初始化之前让构造函数返回检查和错误/消息?
vector<vector<double>>
> 2 的大小,我希望 ctor 停止,原因很明显,否则上述内容会产生 seg 错误,我希望在调用构造函数时自动执行此过程。
我想
如果你想避免异常,你可以做这样的事情。它使用三元运算符检查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;
}
相关文章:
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在按值调用 (c++) 中转发构造函数参数
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 如何在构造函数参数中初始化"std::set"?
- 何时应在构造函数参数中使用 const C++?
- 使用模板化结构作为构造函数参数
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 如何使输入文本文件成为构造函数参数?c++
- shared_ptr构造函数参数是否应按值传递
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 复制构造函数参数为0
- 用作成员构造函数参数的函数的求值顺序
- 结构中的默认成员值或默认构造函数参数
- C++将引用成员绑定到构造函数参数
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 模板函数指针参数与构造函数参数
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何基于构造函数参数模板化类成员函数的代码
- 将派生类构造函数参数传递给受保护的成员
- 如何根据构造函数参数使用超类类型初始化成员变量?