让我们举一个最简单的例子:
配方1:
std::vector<int> vec;
// add 10E11 elements
for(std::size_t n = 0; n < vec.size(); ++n)
// ...
Run Code Online (Sandbox Code Playgroud)
配方2:
std::vector<int> vec;
// add 10E11 elements
for(std::vector<int>::size_type n = 0; n < vec.size(); ++n)
// ...
Run Code Online (Sandbox Code Playgroud)
自然,unsigned int或任何不适当的数据类型在这里都不起作用,我们必须编译 x64。我的问题是:在任何情况下,第一个公式是否会导致问题,或者我们是否可以安全地始终使用这种更短的符号来编写它?如果它们很容易覆盖(x86、任何其他容器、.的其他应用程序size_type),我也会对类似的设置感兴趣。
std::vector保证指针对于其整个序列来说是有效的迭代器,因为返回“一个有效范围的vector::data指针”。[data(), data() + size())这是指针加法,它是在 上定义的std::ptrdiff_t,它是 的签名版本std::size_t。
此外,[iterator.requirements.general]/6 适用:
\n\n\n\n\n\xe2\x80\xa6 对于整数值
\nn和可解引用迭代器值a,(a + n),*(a + n)相当于*(addressof(*a) + n)\xe2\x80\xa6
可能比vector::size_type更窄,std::size_t例如 64 位系统上的 32 位。但这不是我担心的事情。
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |