C++ 自我执行标准:size_t

C++ self-enforcing a standard: size_t

简单的问题, 在处理数组或其他大型数据结构时通常使用整数的地方,强迫自己开始使用 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(或无符号长整数?)而不是经典的 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)