use*_*501 6 c++ integer vector size-t
我的理解size_t是它足够大以容纳你可能期望它保持的任何(整数)值.(也许这是一个糟糕的解释?)
例如,如果你使用像for循环这样的东西迭代向量中的所有元素,size_t通常会是64位长(或者至少在我的系统上),以便它可以保存来自vector.size的所有可能的返回值( ).
或者至少,我认为这是正确的?
因此,有没有理由使用A而不是B:
A: for(uint64_t i = 0; i < v.size(); ++ i)
B: for(size_t i = 0; i < v.size(); ++ i)
如果我的解释错了或者您有更好的解释,请随时编辑.
编辑:我应该补充一点,我的理解是size_t行为像普通的无符号整数 - 也许这是不正确的?
size_t是回归类型sizeof.
该标准表示它是某种无符号整数类型的typedef,并且大到足以容纳任何可能对象的大小.
但它并没有强制要求它是更小,更大还是相同uint64_t(对于固定宽度的64位无符号整数的typedef),在后一种情况下它是否是相同的类型.
因此,在语义正确的地方使用size_t.
就像size()a std::vector<T>(从使用的分配器std::vector获取它size_type,std::allocator<T>使用size_t).
正确的情况是for(std::vector::size_type i ....
为了迭代向量或类似的东西,你将很难找到一个size_t不够大的情况,并且uint64_t是,
当然,在 32 位计算机上,size_t通常为 32 位,但您可能想要处理大于 40 亿的数字,这将需要超过 32 位,这当然是 fo 的一个用例uint64_t。换句话说,uint64_t保证是 64 位,size_t但并非所有机器/架构都是 64 位。