C ++ Boost:BOOST_FOREACH有什么问题吗?

时间:2009-04-04 10:30:26

标签: c++ boost loops

这个是Boost专家。程序员在进入之前是否需要了解其中的任何问题或细节,并将所有旧的C / C ++样式循环替换为精益求精的BOOST_FOREACH

(这个问题部分来自here。)

5 个答案:

答案 0 :(得分:10)

看看:

答案 1 :(得分:9)

BOOST_FOREACH - 宏,我不喜欢宏,而更喜欢使用STL算法+ lambda + bind。

同样C++0x将在BOOST_FOREACH上包含for-loop

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}

这是另一个不使用partialy dead BOOST_FOREACH的原因。

答案 2 :(得分:8)

由于它只是一个宏,你不能在类型名中使用逗号,所以
BOOST_FOREACH(pair<int,int> A, mapB){}
不会工作。
对于其他缺点,我会咨询BOOST_FOREACH() documentation

答案 3 :(得分:7)

我描述了BOOST_FOREACH与手动编码的循环。 BOOST_FOREACH在一个简单的循环中慢了大约30%,这个循环增加了大小为100,000的向量的元素。 所以,如果你编写一个小循环,它就不会那么快。一旦你的循环进行了重大处理,Amdahl定律就开始了,BOOST_FOREACH引起的损失可以忽略不计。

答案 4 :(得分:4)

看一下BOOST_FOREACH宏的来源(在foreach.hpp中) - 这不是我所说的“精益和卑鄙”: - )