我只是不太了解这里发生了什么(构建一个新的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
};
答案 0 :(得分:1)
这段代码
Vector(int s):elem{new double[s]}, sz{ s }{}
或多或少与
相同Vector(int s)
{
elem = new double[s];
sz = s;
}
第一个区别是,书籍代码使用初始化程序列表而不是赋值给类变量赋值。初始化程序列表的优点在于,它可以通过调用适当的构造函数直接初始化变量。另一种形式是首先默认构造变量,然后将其分配给两步过程,这可能会降低效率。但是在您的情况下,变量是一个指针和一个整数,对于这些类型,使用初始化程序列表和使用赋值之间几乎没有区别,但是仍然应该首选初始化程序列表,使其与确实起作用的时间保持一致。任何C ++书籍都应说明初始化程序列表。
第二个区别是书籍代码使用uniform initialisation语法。您可以说出来,因为它使用{}
而不是通常的()
。但是,对于初始化程序列表,我认为这没有什么区别。