简单的问题, 在处理数组或其他大型数据结构时,我通常会在我通常使用整数的地方强迫自己开始使用size_t(或unsigned longs?)会对我有好处吗?
假设你有一个矢量指针:
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(或unsigned longs?)是否有任何副作用。如果我开始使用size_t(或unsigned longs?)而不是经典int,我需要注意什么。
答案 0 :(得分:6)
size_t
肯定比int
更好。最安全的做法是使用容器的实际size_type
,例如:
for( typename decltype(*myVectorPtr)::size_type i = 0; i < myVectorPtr->size(); ++i )
不幸的是,auto
无法在此处使用,因为它会从0
中推断出其类型,而不是size()
来自。{/ p>
使用迭代器或基于范围的接口读取更好一点:
for (auto iter = begin(*myVectorPtr); iter != end(*myVectorPtr); ++iter)
或
for (auto &&item : *myVectorPtr)