正确使用BOOST_FOREACH?

时间:2010-02-16 09:53:46

标签: c++ boost foreach

使用BOOST_FOREACH时,以下代码是否安全?

BOOST_FOREACH (const std::string& str, getStrings())
{
  ...
}

...

std::vector<std::string> getStrings()
{
  std::vector<std::string> strings;
  strings.push_back("Foo");
  ...
  return strings;
} 

或者我应该在调用BOOST_FOREACH之前获取容器的副本,例如:

const std::vector<std::string> strings = getString();
BOOST_FOREACH (const std::string& str, strings)
{
  ...
}

在第一个示例中,BOOST_FOREACH最终可能多次调用getStrings()有任何危险吗?

2 个答案:

答案 0 :(得分:14)

  

虽然BOOST_FOREACH是一个宏,   这是一个非常乖巧的人。   它准确地评估了它的论点   曾经,没有令人讨厌的惊喜

答案 1 :(得分:1)

只要您想以简洁的方式遍历事物,就可以使用BOOST_FOREACH。考虑Boost.Range使用BOOST_FOREACH遍历您自己的类。

我使用BOOST_FOREACH来防止使用for语句,迭代器(声明启动等等)污染代码 我尽可能地使用STL算法(cogweels)和boost lambda表达式(胶水)。它使代码比自定义for循环更容易理解。