C++自执行一个标准:size_t



简单问题,强制自己在处理数组或其他大型数据结构时通常使用int的地方开始使用size_t(或无符号的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(或无符号long?)是否有任何副作用。如果我开始使用size_t(或无符号的longs?)而不是经典的int.

,我需要注意什么吗

size_t肯定比int好。最安全的做法是使用容器的实际size_type,例如:

for( typename decltype(*myVectorPtr)::size_type i = 0; i < myVectorPtr->size(); ++i )

不幸的是,这里不能使用auto,因为它将从0而不是从size()调用推导其类型。

使用迭代器或基于范围的接口读起来有点好:

for (auto iter = begin(*myVectorPtr); iter != end(*myVectorPtr); ++iter)

for (auto &&item : *myVectorPtr)

最新更新