C ++自我执行标准:size_t

时间:2015-02-27 00:56:33

标签: c++ int size-t

简单的问题, 在处理数组或其他大型数据结构时,我通常会在我通常使用整数的地方强迫自己开始使用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,我需要注意什么。

1 个答案:

答案 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)