我们如何声明非静态常量数组作为类的属性?声明非静态常量数组作为类成员
下面的代码产生编译错误
'测试:: X':成员无法初始化
class Test
{
public:
const int x[10];
public:
Test()
{
}
};
我们如何声明非静态常量数组作为类的属性?声明非静态常量数组作为类成员
下面的代码产生编译错误
'测试:: X':成员无法初始化
class Test
{
public:
const int x[10];
public:
Test()
{
}
};
你应该阅读this already posted question。由于无法做你想做的事,所以解决方法是使用std :: vector。
Thaks回复。但是这种解决方案在数组的情况下是不可能的。当我们初始化数组时,我们将得到另一个编译错误(“不能指定数组的显式初始化器”)。 – Vadakkumpadath 2009-10-05 09:23:37
我编辑了我的回复。我连接了错误的问题。请再看一遍。 – Ashwin 2009-10-05 09:33:56
'std :: vector'不一样。它在堆上分配内存。 – 2009-10-05 10:07:32
您可以使用来自tr1的array
类。
class Test
{
public:
const array<int, 10> x;
public:
Test(array<int,10> val) : x(val) // the only place to initialize x since it is const
{
}
};
array
类可以简单地表示如下:
template<typename T, int S>
class array
{
T ar[S];
public:
// constructors and operators
};
使用boost::array(同TR1),它会看起来像:
#include<boost/array.hpp>
class Test
{
public:
Test():constArray(staticConst) {};
Test(boost::array<int,4> const& copyThisArray):constArray(copyThisArray) {};
static const boost::array<int,4> staticConst;
const boost::array<int,4> constArray;
};
const boost::array<int,4> Test::staticConst = { { 1, 2, 3 ,5 } };
需要额外的代码静态成员因为{ { 1, 2, 3 ,5 } }
在初始化列表中无效。
一些优点是,boost :: array定义了大小,开始和结束等迭代器和标准容器方法。
数组具有迭代器和标准方法,如size/begin/end。不需要为一个简单的课程使用提升。 – 2009-10-05 10:33:26
你说得对。但是在任何tr1实现之前,我都在使用boost。 – Arpegius 2009-10-05 11:04:01
我需要存储一些编译时可用的配置数据。我希望将其放置在只读存储区域。 – Vadakkumpadath 2009-10-05 10:35:06