我在浏览标准算法库时,偶然发现了一个例子,它以一种我以前从未见过的方式使用了基于范围的for循环:https://en.cppreference.com/w/cpp/algorithm/is_heap
在给出的例子中,他们使用了一个基于范围的for循环来迭代整数向量:
for (auto t{1U}; auto i : v)
std::cout << i << (std::has_single_bit(++t) ? " | " : " ");
我熟悉最常用的基于范围的for循环。例如
for (const auto& elem : vector)
{
// do something with elem
}
然而,我很困惑地看到auto t{1U}
,我从来没有见过,我想知道它做了什么?
它看起来像是一个临时的范围表达式:https://en.cppreference.com/w/cpp/language/range-for但是我仍然不明白t
到底是什么,为什么这里需要它?
1条答案
按热度按时间8zzbczxx1#
如果查看您自己链接到的基于范围的引用,您将看到语法包含一个名为 init-statement (optional) 的子句。
auto t{1U};
是可选初始化语句。它只是一种在循环范围内定义一个或多个变量的方法。
所以呢
基本上等同于
值得注意的是,the
if
statement自C++17标准以来就有这样一个 init-statement。