在成员初始化列表中初始化的向量与传递给构造函数的向量不一样..?

时间:2018-02-11 13:52:43

标签: c++

我正在尝试创建一个简单的表类,其中包含两个使用成员初始化列表初始化的向量:

Table.hh

class Table
{
public:
    Table(vector<double> a, vector<double> b);
    ~Table();

    double interpolate(double val, bool extrapolate = true);
    double integrate();

    void print();

private:
    vector<double> x, y;

};

Table.cc

Table::Table(vector<double> a, vector<double> b)
: x(a), y(b)
{
    cout << this->x.size() << " " << this->y.size() << endl;

    try
    {
        if (this->x.size() != this->y.size())
            throw LengthException();
    }   
    catch(exception &e)
    {
        cout << e.what() << endl;
    }
}

当我尝试通过创建表的新实例来测试异常时:

vector<double> a = {1.0, 2.0, 3.0, 4.0};
vector<double> b = {1.0, 2,0, 3.0};

Table* mytable = new Table(a, b);

我发现异常没有被抛出,每个向量的大小都是4。

我无法立即明白为什么这不能按预期工作,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

因为向量b的大小是4:

我重新格式化了您的代码,现在它应该是显而易见的:

vector<double> b = { 1.0,
                     2,
                     0,
                     3.0 };