(1).将a[10]转移到类层次中,即将const int a[10]改为static const int a[10],你可以认真的想一想,既然a[10]是const,那么每一个对象真的需要单独的一份a[10]吗?大部分时候答案应该是no。现在类定义如下:
class A
{
public:
A(){}
private:
static const int a[10];
};
const int A::a[2] = {1,2,3,4,5,6,7,8,9,0};//在实现文件中。
(2)将数组改为指针,即const int a[10]改为const int* const a; 现在类定义如下:
const int ca[10] = {1,23,4,5,6,7,8,9,0};//注意
class A
{
public:
A():a(ca){}
private:
const int* const a;
};
(3)如果你想在每个对象中都保持一份这个常量数组的拷贝,也可以用vector来代替
#include <vector>
using namespace std;
//...
const int ca[5] = {1, 2, 3, 4, 5};
class A
{
public:
A():a(ca, ca + 5){}
private:
const vector a;
};
针对这三种方式,访问我博客的朋友也希望能讨论下各自的优虐,哪怕是留个脚印也行,我博客每天那么多人访问居然都保持沉默,看了我那么多帖怎么说也得回一下吧
我认为常量数组成员就是类的特性了。而不是对象的特性。所以应该声明为静态的。为此我推荐第一种方式。
各位也发表下看法,讨论讨论。