有人可以帮我分解这行代码吗?

时间:2019-07-05 06:04:26

标签: c++

我只是不太了解这里发生了什么(构建一个新的vector部分)。这是我用来学习C ++的书中的代码。我似乎在网络上的任何地方都找不到这种结构。

class Vector 
{

public:
    Vector(int s):elem{new double[s]}, sz{ s }{}    //constructs a new vector
    double& operator[](int i) { return elem[i]; }   //elements access: subscripting
    int size() { return sz; }



private:
    double* elem; //pointer to the elements 
    int sz; // number of elements


};

1 个答案:

答案 0 :(得分:1)

这段代码

Vector(int s):elem{new double[s]}, sz{ s }{}

或多或少

相同
Vector(int s)
{
    elem = new double[s];
    sz = s;
}

第一个区别是,书籍代码使用初始化程序列表而不是赋值给类变量赋值。初始化程序列表的优点在于,它可以通过调用适当的构造函数直接初始化变量。另一种形式是首先默认构造变量,然后将其分配给两步过程,这可能会降低效率。但是在您的情况下,变量是一个指针和一个整数,对于这些类型,使用初始化程序列表和使用赋值之间几乎没有区别,但是仍然应该首选初始化程序列表,使其与确实起作用的时间保持一致。任何C ++书籍都应说明初始化程序列表。

第二个区别是书籍代码使用uniform initialisation语法。您可以说出来,因为它使用{}而不是通常的()。但是,对于初始化程序列表,我认为这没有什么区别。