例如,我有一个带整数成员的类
class A
{
int m_index;
...
};
假设索引在short int范围内,哪一个最好用:short,int或long?我正在编译64位程序。
答案 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_t
。 int
是一个中间立场 - 足够大,看起来无限,直到它崩溃,可能不适合你或甚至你的应用程序,但当有人随便重用你的A
用于其他应用程序....
答案 3 :(得分:0)
如果您希望将您的课程与未来的要求变更隔离一点,您应该:
确保m_index
是私人会员。
创建typedef
并在界面和成员变量类型中使用typedef
。
以下是代码:
class A
{
public:
typedef int IndexType;
IndexType getIndex() const;
void setIndex(IndexType index);
private:
IndexType m_index;
};