jan*_*b04 7 c++ types for-loop
关于这个主题已经有一些问题(1、2、3 )。问题是,似乎没有一个明确的答案。有些答案建议( 1 , 2 ),有些答案建议( 1 , 2 )。其他选项包括、、或使用容器或成员类型。size_tptrdiff_tintuint32_tautodecltype.size()size_type
这个问题似乎不适合基于观点,但我认为事实并非如此。仅仅因为尚未就使用哪种类型达成共识,并不意味着不存在客观的答案。这是因为不同的选择不仅美观,而且实际上可以影响代码的行为。
例如,在循环条件中使用符号不匹配的索引变量类型将导致编译器警告,如下所示。此外,使用范围太小的类型可能会导致溢出,在有符号类型的情况下会导致 UB。同时,在某些情况下改变循环计数器类型可能会导致“疯狂的性能偏差”。
我还想找出最流行的(尽管不一定是最好的)创建 for 循环的方法,因此我使用 GitHub *搜索来查找。结果如下:
| 循环型 | GitHub 上的代码结果计数(平均值;“手动”循环 + 基于范围) |
|---|---|
for (int |
15.8m |
for (size_t |
11.6m |
for (auto |
7.5m |
for (uint32_t |
2.3m |
std::for_each |
501k |
for (ptrdiff_t |
98.7k |
for (decltype |
77.5k |
不同循环类型之间的出现次数肯定存在很大差异,但是,似乎没有明显的杰出领导者。
因此,我发布这个问题询问,在 C++ 的 for 循环中索引变量使用的最佳类型是什么,或者应该选择这种类型的规则或条件是什么?
*:GitHub 搜索工具每次都会为“代码结果”(计数)生成不同的结果,因此我对 26 个值进行了平均。由于搜索是基于文本的,因此它包括表单for (int i = 0; i < n; ++i)和的结果for (int i : vec)。
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |