gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:44:35 26 4
gpt4 key购买 nike

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

调用构造函数时,我希望所述数据成员由复制构造函数初始化,而不是默认初始化(为空 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[0]),
B(mat[1])
{
/* Rest of the constructor here*/
}

我的问题是:

  • 与允许默认初始化和使用其他方法相比,这样做是否提高了效率?例如做

    V.assign(vee)

  • 有没有办法让构造函数在默认初始化或列表初始化发生之前返回检查和错误/消息?

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

最佳答案

我想如果你想避免异常,你可以这样做。它使用三元运算符来检查 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;
}

关于c++ - 使用初始化列表时检查传递给构造函数的参数 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29737875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com