代码之家  ›  专栏  ›  技术社区  ›  Steven Scott

忽略元素的基于范围的for循环

  •  2
  • Steven Scott  · 技术社区  · 6 年前

    我正在为自定义容器类型编写一个单元测试。我想确保它包含正确数量的元素。

    int count = 0;
    for (const auto &el : region) {
      ++count;
    }
    // Check that count is the right number
    

    因为这段代码没有对“el”执行任何操作,所以我收到了一条关于未使用变量的编译器警告。如何编写基于范围的for循环而不声明“变量别名”,如“el”?

    显式使用迭代器的老式for循环显然可以解决这个问题,但我只是想知道是否可以使用基于范围的for来实现。

    1 回复  |  直到 6 年前
        1
  •  4
  •   HolyBlackCat    6 年前

    抑制警告至少有两种方法:

    for ([[maybe_unused]] const auto &el : region) // C++17 or newer
    {
        // ...
    }
    

    for (const auto &el : region)
    {
        (void)el;
        // ...
    }
    

    但正如@Jarod42的评论所指出的,您可以使用 std::distance(std::begin(region), std::end(region)); 相反,如果您的容器有适当的迭代器。