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

发布于 2024-08-07 06:56:23 字数 209 浏览 4 评论 0原文

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

以下代码产生编译错误

“Test::x”:无法初始化成员

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

public:
    Test()
    {
    }
};

How can we declare a non-static const array as an attribute to class?

Following code produces compilation error

'Test::x' : member could not be initialized

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

public:
    Test()
    {
    }
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧时浪漫 2024-08-14 06:56:23

您应该阅读这个已经发布的问题。由于无法执行您想要的操作,因此解决方法是使用 std::vector。

You should read this already posted question. Since it is not possible to do what you want, the workaround is to use an std::vector.

一绘本一梦想 2024-08-14 06:56:23

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

You could use array class from tr1.

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 class could be simplistically represented as follows:

template<typename T, int S>
class array
{
    T ar[S];
public:
    // constructors and operators
};
错爱 2024-08-14 06:56:23

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

Using boost::array (the same as tr1) it will looks like:

    #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 } };

The extra code static member is needed because { { 1, 2, 3 ,5 } } is invalid in initialization list.

Some advantages is that boost::array have defined iterator and standard container methods like size, begin and end.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文