对类中的整数成员变量使用short,int或long?

时间:2014-10-09 04:52:15

标签: c++ int

例如,我有一个带整数成员的类

class A
{
    int m_index;
    ...
};

假设索引在short int范围内,哪一个最好用:short,int或long?我正在编译64位程序。

4 个答案:

答案 0 :(得分:3)

为了您的目的(http://en.cppreference.com/w/cpp/types/size_t),size_t怎么样?在这里(http://www.viva64.com/en/t/0044/),您可以找到有关此类型的更多信息。

答案 1 :(得分:1)

除非您正在处理用于实例化大量对象的类,否则坚持int(或unsigned int)通常是个好主意。在这种情况下,为了节省内存,最好选择最适合您需求的最窄类型(甚至可以使用适当宽度的位域)。

当然,这假设int足够广泛用于您的目的。否则,您将不得不使用更大的类型。

这同样适用于浮点类型。坚持double是个好主意,除非你有充分的理由使用float(例如,对于大规模实例化的类类型中的字段)。

最重要的是,我个人更愿意尽可能使用 unsigned 整数类型,并且仅在必要时才使用签名整数类型。

最后,一个更高层次的问题是:那是什么样的指数?例如,如果这是索引std::deque<int>的索引,那么该索引的最佳类型将是std::deque<int>::size_type(即BTW,无符号)。如果该索引应该为内置数组编制索引,那么size_t可能是一个很好的候选者。如果该索引应该索引整个内存,那么uintptr_t是最合适的。

答案 2 :(得分:1)

如果您想优先考虑减少内存使用并且拥有该对象的许多并发实例,则可以合理地使用short int,否则 - 如果您希望A的设计能够传达任意数量的元素可以编入索引 - 即使A的当前使用仅使用相对较小的数字 - 使用size_tint是一个中间立场 - 足够大,看起来无限,直到它崩溃,可能不适合你或甚至你的应用程序,但当有人随便重用你的A用于其他应用程序....

答案 3 :(得分:0)

如果您希望将您的课程与未来的要求变更隔离一点,您应该:

  1. 确保m_index是私人会员。

  2. 创建typedef并在界面和成员变量类型中使用typedef

  3. 以下是代码:

    class A
    {
        public:
           typedef int IndexType;
    
           IndexType getIndex() const;
           void setIndex(IndexType index);
    
        private:
          IndexType m_index;
    
    };