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