类的数组成员变量的初始化

  

使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之。

但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。

这里介绍一下当数组作为类的成员变量时,应该怎么对它(数组)进行初始化。

在类的构造函数中可以使用成员初始化表初始化各个成员变量,这种方法是很受推荐和赞扬的,因为使用成员初始化表中对成员进行初始化和在构造函数体中对成员赋值是不同的,特别对于成员对象,在效率上是很有差别的(对于这一点不清楚的朋友们,可以查看C++primer ed3 14.5,这里对此不细讲)。

那么,用惯了成员初始化表的朋友们,因为尝到了其甜头,通常在第一次对待成员数组时,都会选择成员初始化表,而这不但不会给我们带来好处,反而让我们碰了一鼻子灰,并且苦恼。

本文想说的就是:类的成员变量不能使用成员初始化表进行初始化,而只能通过在构造函数体中对数组的各个成员进行赋值。

class bb
{
public:
 bb() : a[0](0) {} //出现c2059错误

 bb(int (&a)[3]) :a[0](a[0]),a[1](a[1]),a[2](a[2]) {}//出现c2059错误

 bb(int (&a)[3])
 {
   this->a ={a[0],a[1],a[2]};     //错误,不能使用初始化表
 }

 //正确写法:

 bb()

 {

  this->a[0]= 0;
  this->a[1]= 0;

  this->a[2] =0;

 }

 bb(int (&a)[3])

 {
  this->a[0] =a[0];
  this->a[1] =a[1];
  this->a[2] =a[2];
 }

 int a[3];
};

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐