对类中的整数成员变量使用short、int或long
Use short, int or long for an integer member variable in a class?
例如,我有一个具有整数成员的类
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_t
。int
是一个中间地带——它足够大,看起来是无限的,直到它崩溃,也许不适合你,甚至不适合你的应用程序,但当有人随意将你的A
重新用于其他应用程序时。。。。
如果你想让你的类与未来的需求变化隔离一点,你应该:
-
请确保
m_index
是私人成员。 -
创建一个
typedef
,并在接口和成员变量类型中使用typedef
。
这是代码:
class A
{
public:
typedef int IndexType;
IndexType getIndex() const;
void setIndex(IndexType index);
private:
IndexType m_index;
};
- 'short int'持有的值溢出,但"自动"不会溢出?
- 从“ int”到'int16_t {aka short int}'内部{}的“((int)a) -1)”的缩小转换
- 如果超过 short int(c++) 的最大值会发生什么
- C++ 中有符号 int 和无符号 short 的比较
- Short Int基掩码在C 库子弹中的工作方式
- 为什么C/C++会自动将char/wchar_t/short/bool/enum类型转换为int
- 为什么编译器将"char"与"int"匹配而不是"short"?
- 为什么 foo(short int *) 和 bar(signed short *) 认为 QT 的签名不同
- 错误:从 'short unsigned int*' 到"短无符号 int"的转换无效|(在 C++ 中)
- wchar_t*到short int的转换
- 将无符号short/int强制转换为char*
- 像javashort[]一样在c中创建short int数组
- C/C++:在32位机器上的sizeof(short)、sizeof(int)、sizeof(long)、size of
- 对'icu_56::UnicodeString::UnicodeString(signed char, unsigned short const*, int)' 的未定义引用
- 将无符号字符转换为 int 和 short
- gcc 奇怪的转换警告(<B>从"int"转换为"A::count_type {aka short unsigned int}"可能会改变其值)
- 对类中的整数成员变量使用short、int或long
- 让template通过指定bitsize在char/short/int之间进行选择
- 是实现定义的unsigned short + int类型
- 将 int* 转换为 const short int*