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