【发布时间】:2015-04-29 14:43:05
【问题描述】:
简单的问题, 强迫自己在处理数组或其他大型数据结构时通常使用整数的地方开始使用 size_t(或无符号长整数?)对我有好处吗?
假设你有一个向量指针:
auto myVectorPtr = myVector;
你不知道,这个向量的大小大于:
std::numeric_limits<int>::max();
你有一个循环:
for(int i = 0; i < myVectorPtr->size(); ++i)
不是更好吗
for(size_t i = 0; i < myVectorPtr->size(); ++i)
为了避免溢出?
我想我的问题确实是,在算术和其他常见操作中使用 size_t(或无符号长整数?)是否有任何副作用。如果我开始使用 size_t(或 unsigned longs?)而不是经典的 int,有什么需要注意的吗?
【问题讨论】:
-
我相信 size_t 类型取决于平台。错误
-
使用正确的类型通常是个好习惯。如果这意味着
std::size_t,因为这是函数返回的内容,那么使用std::size_t;如果不合适,标准将不会返回。请注意,解决此问题的一种方法是根本不使用索引:for (auto const& v : myVector) { ... } -
向量受 max_size() 限制cplusplus.com/reference/vector/vector/max_size
-
@amchacon,您会注意到,它由
std::vector::size_type表示,并且可以大于int表示的最大数字。 -
如果
size_t不是int,for(int i = 0; i < myVectorPtr->size(); ++i)会生成警告。通常使用-Wall和-Werror是一种很好的做法(或其他编译器的等效项)。