【发布时间】:2009-04-04 10:30:25
【问题描述】:
这是为 Boost 专家准备的。程序员在进入并将所有旧的 C/C++ 样式循环替换为看起来简洁的 BOOST_FOREACH 之前,是否有任何陷阱或细节需要注意?
(本题部分来源于here。)
【问题讨论】:
这是为 Boost 专家准备的。程序员在进入并将所有旧的 C/C++ 样式循环替换为看起来简洁的 BOOST_FOREACH 之前,是否有任何陷阱或细节需要注意?
(本题部分来源于here。)
【问题讨论】:
看看:
【讨论】:
【讨论】:
因为它只是一个宏,所以你不能在类型名中使用逗号,所以BOOST_FOREACH(pair<int,int> A, mapB){}
不会工作。
对于其他缺点,我会咨询BOOST_FOREACH() documentation。
【讨论】:
auto 是你的朋友! BOOST_FOREACH(auto a, mapB) {...}
typedef,例如typedef pair<int,int> MyIntPair; BOOST_FOREACH(MyIntPair A, mapB)。
我分析了 BOOST_FOREACH 与手动编码循环。
BOOST_FOREACH 在一个增加大小为 100,000 的向量的元素的简单循环中慢了大约 30%。
所以,如果你正在编写一个小循环,它不会那么快。一旦你的循环进行了主要处理,阿姆达尔定律就会生效,BOOST_FOREACH 造成的损失可以忽略不计。
【讨论】:
看看 BOOST_FOREACH 宏的源代码(在 foreach.hpp 中)——这不是我所说的“精益求精”:-)
【讨论】: