Har*_*023 3 c++ c++20 range-based-loop
我正在浏览标准算法库,遇到一个示例,该示例以我以前从未见过的方式使用基于范围的 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) ? " | " : " ");
Run Code Online (Sandbox Code Playgroud)
我熟悉最常用的基于范围的 for 循环。例如
for (const auto& elem : vector)
{
// do something with elem
}
Run Code Online (Sandbox Code Playgroud)
然而,我很困惑auto t{1U},我以前从未见过它,想知道它做了什么?
看起来它可能是一个临时范围表达式:
https://en.cppreference.com/w/cpp/language/range-for
但我仍然对t实际是什么以及为什么这里需要它感到困惑?
如果您查看自己链接到的基于范围的引用,您将看到该语法包含一个名为init-statement\xe2\x80\x8a(optional)的子句。
\nauto t{1U};是可选的初始化语句。
它只是一种在循环范围内定义一个或多个变量的方法。
\n所以
\nfor (auto t{1U}; auto i : v)\n std::cout << i << (std::has_single_bit(++t) ? " | " : " ");\nRun Code Online (Sandbox Code Playgroud)\n基本上相当于
\n{\n auto t{1U}; // The same as unsigned t = 1;\n\n for (auto i : v)\n std::cout << i << (std::has_single_bit(++t) ? " | " : " ");\n}\nRun Code Online (Sandbox Code Playgroud)\n值得注意的是,自 C++17 标准以来,该if语句就有了这样的init 语句。