我是一名C开发人员,我决定转向使用c ++作为主要语言来扩大我的视野。从“C ++编程语言”学习我看到了这个创建类的例子:
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { }
double& operator[](int i) { return elem[i]; }
int size() { return sz; }
private:
double* elem;
int sz;
};
我没有使用sz {s} {}
为什么我们使用{}
?为什么在行尾没有;
?
因为懒惰的缩进。让我们更清楚地写一下:
class Vector
{
private:
double* elem;
int sz;
public:
Vector(int s)
: elem{new double[s]}
, sz{s}
{
// ctor body
}
// More class members
};
看到?你的神秘{}
只是构造函数的主体,它只是一个函数体,而在C中,函数不会以;
结尾。
以:
开头的奇怪行是初始化列表,其中初始化成员变量和基类,即将构造函数写入其构造函数的位置。 sz{s}
只是这个列表中的第二个元素。
最后一个{}
是构造函数的主体。方法最后不需要;
。之前的东西是初始化列表:
Vector(int s) :elem{new double[s]}, sz{s} { }
// ^^ initializer list ^^ body of the constructor
这也可以写成
Vector(int s) { // no initializer list, but still
// members are initialized here already
elem = new double[s];
sz = s;
} // no ; here !!
但随后会对该成员进行初始化,然后分配一个值。