C++ 忽略元素的基于范围的循环

C++ 忽略元素的基于范围的循环,c++,c++11,C++,C++11,我正在为自定义容器类型编写一个单元测试。我想确保它包含正确数量的元素 int count = 0; for (const auto &el : region) { ++count; } // Check that count is the right number 因为这段代码对“el”没有任何作用,所以我得到了一个关于未使用变量的编译器警告。如果不声明像“el”这样的“变量别名”,如何编写基于范围的for循环 一个显式使用迭代器的老式for循环显然可以解决这个问题,但我只是想知道

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

int count = 0;
for (const auto &el : region) {
  ++count;
}
// Check that count is the right number
因为这段代码对“el”没有任何作用,所以我得到了一个关于未使用变量的编译器警告。如果不声明像“el”这样的“变量别名”,如何编写基于范围的for循环


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

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

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



但正如@Jarod42的注释所指出的,您可以只使用
std::distance(std::begin(region),std::end(region))。您至少可以“忽略”它是
(void)el
region
没有告诉您它有多大的
大小的
成员?
const auto count=std::distance(std::begin(region),std::end(region))?我使用了一个
NumRange
类,它允许您对(size\u ti:mk\u NumRange(n\u迭代)){/*无论什么*/}
执行
。如果使用了
i
,这很好,但是如果您只想重复
n次迭代
,忽略
i
很有用。强制转换到
void
可能不会抑制某些编译器的警告,即使它抑制了主要编译器的警告。
for (const auto &el : region)
{
    (void)el;
    // ...
}