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

Use short, int or long for an integer member variable in a class?

本文关键字:short int long 变量 整数 成员      更新时间:2023-10-16

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

class A
{
    int m_index;
    ...
};

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

size_t如何满足您的需求(http://en.cppreference.com/w/cpp/types/size_t)?在这里(http://www.viva64.com/en/t/0044/)您可以找到有关此类型的更多信息。

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

当然,这是假设int对于您的目的来说足够宽。否则,您将不得不使用更大的类型。

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

除此之外,我个人更喜欢尽可能使用无符号整数类型,并且只有在必要时才使用带符号integer类型。

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

如果你想优先考虑减少的内存使用量,并有许多对象的并发实例,你可以合理地使用short int,否则-如果你想让A的设计传达任何数量的元素都可以被索引-即使A的当前使用只使用相对较小的数量-也可以使用size_tint是一个中间地带——它足够大,看起来是无限的,直到它崩溃,也许不适合你,甚至不适合你的应用程序,但当有人随意将你的A重新用于其他应用程序时。。。。

如果你想让你的类与未来的需求变化隔离一点,你应该:

  1. 请确保m_index是私人成员。

  2. 创建一个typedef,并在接口和成员变量类型中使用typedef

这是代码:

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