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

C++ 对类中的整数成员变量使用short、int或long?,c++,int,C++,Int,例如,我有一个包含整数成员的类 class A { int m_index; ... }; 假设索引在short int范围内,那么最好使用哪一个:short、int还是long?我正在编译64位程序。对于您的目的(),大小如何?在这里(),您可以找到有关此类型的更多信息。通常最好坚持使用int(或unsigned int),除非您处理的是用于实例化大量对象的类。在这种情况下,为了节省内存,最好选择适合您需要的最窄类型(甚至可以使用适当宽度的位字段) 当然,这是假设int对于您

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

class A
{
    int m_index;
    ...
};

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

对于您的目的(),大小如何?在这里(),您可以找到有关此类型的更多信息。

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

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

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


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


最后,一个更高层次的问题是:这是什么样的指数?例如,如果这是一个索引a
std::deque
,那么该索引的最佳类型将是
std::deque::size\u type
(顺便说一句,无符号)。如果该索引应该为内置数组编制索引,那么
size\t
可能是一个很好的候选。如果该索引应该对整个内存进行索引,那么
uintptr\u t
是最合适的。

如果您想优先减少内存使用量并拥有多个并发对象实例,可以合理地使用
short int
,否则-如果您希望
A
的设计传达任何数量的元素都可以被索引-即使当前使用
A
只使用相对较小的数字-使用
大小\u t
int
是一个中间地带——大到足以让它看起来无限,直到它崩溃为止,可能对你甚至你的应用程序都没有,但当有人随意地将你的
a
用于其他应用程序时……

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

  • 确保
    m_index
    是私有成员

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

  • 代码如下:

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

    如果你确定索引在短整数范围内,那么就使用它。默认情况下使用
    int
    ,除非你有特殊理由使用另一种类型。“除此之外,我个人更喜欢尽可能使用无符号整数类型,只有在必要时才使用有符号整数类型。”-FWIW,我不同意这一点,由于像
    delta=abs(a-b)
    这样的代码在
    unsigned
    b>a
    中的行为不像预期的那样-存在许多这样的问题。在已知
    int
    s大于所需的情况下,以这种潜在错误为代价试图让最后一位发挥作用是没有意义的。虽然我不同意他在很多问题上所说的很多,但LakOS在大量的C++开发中以冗长的细节来阐述这个问题。@托尼D:在我的实践中,所有需要从无符号到有符号算术的交叉情况总是像一个拇指一样突出。我从来没有遇到过任何问题。这是公平的——只是因为你在这个领域积极地提出建议,我想我会引用相反的论点,并为那些考虑此事的人提供一些参考。