1. 程式人生 > >類的陣列成員變數的初始化

類的陣列成員變數的初始化

使用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];
};


from: http://blog.sina.com.cn/s/blog_4d9b6da90100nnj8.html