将非静态const数组声明为类成员

时间:2009-10-05 09:08:46

标签: c++ arrays class static const

如何将非静态const数组声明为类的属性?

以下代码产生编译错误

  

'Test :: x':无法初始化成员

class Test
{
public:
    const int x[10];

public:
    Test()
    {
    }
};

3 个答案:

答案 0 :(得分:3)

您应该阅读this already posted question。由于无法执行您想要的操作,因此解决方法是使用std :: vector。

答案 1 :(得分:1)

您可以使用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
};

答案 2 :(得分:0)

使用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。