当前位置:  开发笔记 > 编程语言 > 正文

C++数组常量长度(初始化)

如何解决《C++数组常量长度(初始化)》经验,为你挑选了2个好方法。

我有一个包含数组的类.我想要将此数组设置为常量的长度:

// Entities.h
    class Entities
    {
        private:
            const int maxLimit;
            int objects[maxLimit];
            int currentUsage;

        public:
            Entities();

            bool addObject(int identifier);
            void showStructure();
    };

我遇到的主要问题是构造函数.我想:

// Entities.cpp
    Entities::Entities() : maxLimit(50)
    {
        currentUsage = 0;
        cout << "Entities constructed with max of 50" << endl;
    }

本来就足够了......但事实并非如此.我不知道是否可以使用初始化列表进行数组初始化.

如何objects使用maxLimitconst 初始化数组?我对C++中的类比较新,但我有Java经验.我主要测试这种'常数'现象.



1> Johannes Sch..:

数组必须具有恒定长度.我的意思是该类的所有对象的长度相同.这是因为编译器必须知道每个对象的大小,并且对于该特定类的所有对象它必须是相同的.所以,以下会这样做:

class Entities
{
    private:
            static const int maxLimit = 50;
            int objects[maxLimit];
            int currentUsage;

    public:
            Entities();

            bool addObject(int identifier);
            void showStructure();
};

在cpp文件中:

const int Entities::maxLimit;

我更喜欢使用枚举,因为我不必在cpp文件中定义静态,然后:

class Entities
{
    private:
            enum { maxLimit = 50 };
            int objects[maxLimit];
            int currentUsage;

    public:
            Entities();

            bool addObject(int identifier);
            void showStructure();
};

如果要拥有数组的每个对象大小,则可以使用动态数组.vector就是这样一个:

class Entities
{
    private:
            const int maxLimit;
            std::vector objects;
            int currentUsage;

    public:
            Entities();

            bool addObject(int identifier);
            void showStructure();
};

// Entities.cpp
Entities::Entities(int limit) 
    : maxLimit(limit), objects(limit), currentUsage(0)
{
    cout << "Entities constructed with max of 50" << endl;
}

最好是在初始化列表中尽可能多地进行初始化.


对于枚举提示+1,它通常是静态整数周围最好的"黑客"
+1这解决了他的问题而没有使用动态记忆,这意味着它比迄今为止所做的任何其他建议(在回答他的问题的精神方面)更好.
约瑟夫,矢量解决方案从堆中获取内存.前两个没有堆分配.c ++ 1x将具有std :: dynarray用于此目的:确定runtim的长度,但仍然具有恒定的长度(即不改变长度),并且在可能的情况下从堆栈分配.

2> Evgeny Lazin..:

如果需要在编译时设置数组大小,可以使用template参数:

template
class Entities
{
    int objects[maxLimit];
    public:
        Entities() {}
        ...
};

Entities<1000> inst;

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有