【问题标题】:Correct BOOST_FOREACH usage?正确的 BOOST_FOREACH 用法?
【发布时间】:2010-02-16 09:53:46
【问题描述】:

使用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()

【问题讨论】:

    标签: c++ boost foreach


    【解决方案1】:

    虽然 BOOST_FOREACH 是一个宏, 这是一个非常乖巧的人。 它准确地评估它的论点 一次,不会导致令人讨厌的惊喜

    【讨论】:

    • 这是他们文档中的引述:)
    【解决方案2】:

    您可以在任何时候以简洁的方式遍历事物时使用BOOST_FOREACH。考虑 Boost.Range 用 BOOST_FOREACH 遍历你自己的类。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2011-02-10
      • 2021-10-16
      相关资源
      最近更新 更多