C++自我执行标准:size_t

Fra*_*era 0 c++ int size-t

简单的问题,在处理数组或其他大型数据结构时,我通常会在我通常使用整数的地方强迫自己开始使用size_t(或unsigned longs?)会对我有好处吗?

假设你有一个向量指针:

auto myVectorPtr = myVector;
Run Code Online (Sandbox Code Playgroud)

您不知道,此向量的大小大于:

std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)

你有一个循环:

for(int i = 0; i < myVectorPtr->size(); ++i)
Run Code Online (Sandbox Code Playgroud)

使用不是更好

for(size_t i = 0; i < myVectorPtr->size(); ++i)
Run Code Online (Sandbox Code Playgroud)

避免遇到溢出?

我想我的问题确实是,在算术和其他常见操作中使用size_t(或unsigned longs?)是否有任何副作用.如果我开始使用size_t(或unsigned longs?)而不是经典int,我还需要注意什么.

M.M*_*M.M 6

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

for( typename decltype(*myVectorPtr)::size_type i = 0; i < myVectorPtr->size(); ++i )
Run Code Online (Sandbox Code Playgroud)

不幸的是auto不能在这里使用,因为它会推断出它的类型0,而不是来自size()调用.

它使用迭代器或基于范围的接口读取更好一点:

for (auto iter = begin(*myVectorPtr); iter != end(*myVectorPtr); ++iter)
Run Code Online (Sandbox Code Playgroud)

要么

for (auto &&item : *myVectorPtr)
Run Code Online (Sandbox Code Playgroud)