C++ C++;自我执行标准:尺寸

C++ C++;自我执行标准:尺寸,c++,int,size-t,C++,Int,Size T,简单的问题,, 在处理数组或其他大型数据结构时通常使用int的地方,强迫自己开始使用size_t(或无符号long?)对我有好处吗 假设您有一个向量指针: auto myVectorPtr = myVector; 您不知道,此向量的大小大于: std::numeric_limits<int>::max(); std::numeric_limits::max(); 你有一个循环: for(int i = 0; i < myVectorPtr->size(); ++i)

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

假设您有一个向量指针:

auto myVectorPtr = myVector;
您不知道,此向量的大小大于:

std::numeric_limits<int>::max();
std::numeric_limits::max();
你有一个循环:

for(int i = 0; i < myVectorPtr->size(); ++i)
for(inti=0;isize();++i)
如果使用

for(size_t i = 0; i < myVectorPtr->size(); ++i)
for(size_t i=0;isize();++i)
为了避免溢出


我想我的问题是,在算术和其他常见运算中使用size\u t(或无符号long?)是否有任何副作用。如果我开始使用size\u t(或无符号的long?)而不是经典的int,有什么需要注意的吗?

size\u t
肯定比
int
好。最安全的做法是使用集装箱的实际尺寸,例如:

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


我认为尺寸类型取决于平台。错误使用正确的类型通常是一种好的做法。如果这意味着函数返回的是
std::size_t
,那么使用
std::size_t
;如果不合适,标准不会回复。请注意,解决此问题的一种方法是根本不使用索引:
for(auto-const&v:myVector){…}
Vector受max_size()@amchacon的限制,您会注意到,它由
std::Vector::size_type
表示,并且可以大于
int
表示的最大值(int i=0;isize();++i)
如果
size\u t
不是
int
,则会生成警告。通常使用
-Wall
-Werror
是一种很好的做法(或其他编译器的等效方法)。对于
向量
,其
大小_-type
不能大于
大小_-t
,因此您可以使用
大小_-t
;但理论上其他容器类型没有连续的要求(例如
尺寸
)可以有一个更大的
size\u type
。第一个代码块实际上是满嘴的:P不管怎样,有时候你需要size变量
i
,以便在循环中形成一些算术。但在其他情况下,我同意首选迭代器方式。另外,语法的最后一个代码块的名称是什么?在我看来像foreach,但在我看来是foreachNC++显然是MattMcNabb,对于非STL容器,比如T*(通用数组),如果是C样式数组,请使用<代码> siZeStt < /Cord>。
for (auto iter = begin(*myVectorPtr); iter != end(*myVectorPtr); ++iter)
for (auto &&item : *myVectorPtr)