通过 C ++编程语言,第4版阅读,有一个如此定义的类
class Vector
{
private:
int sz;
double *a;
public:
Vector(int s) :elem{new double[s]}, sz{s} {}
}
我对这个构造函数语法的工作原理有点困惑。我相信Vector(int s)
正在创建一个构造函数,它接受一个参数s
,并初始化elem
和sz
。但为什么会有:
?我认为函数体被{}
包围了?那么最后的空括号{}
会起什么作用呢?
答案 0 :(得分:5)
:
被称为初始化列表,用于在调用构造函数时快速简洁地设置成员变量的值。
{}
是构造函数的方法体。由于构造函数与方法类似,因此必须存在用于编译代码的主体。由于不需要任何代码,因此使用空体,因此函数不执行任何操作。
答案 1 :(得分:2)
这是Initializer List的初始化。
答案 2 :(得分:1)
:
用于"初始化"类的成员(此方法也称为
成员初始化列表)
使用:
和函数体{}
initiallizer list :
初始化类的成员,而构造函数体{}
将值赋给类的成员。
差异可能看起来不是很大,但它实际上是初始化const
数据类型和reference
数据类型成员(只能在声明期间初始化)的唯一方法。
所以当你这样做时
class Test
{
const int i; const string str;
public:
Test(int x, string y):i{x},str{y};
}
这样可行,但是如果您尝试通过在构造函数体中编写代码来为const int i
和const string str
赋值,则会导致结果
那么最后的空括号{}会起什么作用?
没有任何东西只是强制放置那些括号(即使它是空的)
当您在main
函数中创建类的对象并将其传递给所需的参数时,它们基本上可以充当函数。