Bar*_*rry 21
主要的区别在于range-for是一种语言构造,而BOOST_FOREACH一个宏在做一些看起来像语言构造的东西的魔术.它试图在前C++ 11的限制下做同样的事情.目标BOOST_FOREACH 是范围.
有一种情况我甚至会想到使用BOOST_FOREACH而不是range-for,它会迭代一个元组的容器,你想要展开元组:
std::map<int, int> m;
int key, value;
BOOST_FOREACH(boost::tie(key, value), m)
{
// do something with key and value here
}
Run Code Online (Sandbox Code Playgroud)
相比于:
int key, value;
for (const auto& pair : m)
{
std::tie(key, value) = pair;
// do something
}
Run Code Online (Sandbox Code Playgroud)
我喜欢你可以把它tie直接放到循环标题中,虽然最终这是一个很小的优势,甚至不值得考虑这是一个决定.使用范围为.总是.
C++ 17将引入结构化绑定,这甚至可以消除那些次要的语法优势:
for (auto const& [key, value] : m)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
那时,没有任何理由可以使用BOOST_FOREACH.
| 归档时间: |
|
| 查看次数: |
3503 次 |
| 最近记录: |