c++ - 正确的 BOOST_FOREACH 用法?

标签 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() 的危险?

最佳答案

And although BOOST_FOREACH is a macro, it is a remarkably well-behaved one. It evaluates its arguments exactly once, leading to no nasty surprises

关于c++ - 正确的 BOOST_FOREACH 用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2271907/

相关文章:

c++ - 在 C++ Builder XE4 中搜索内存泄漏

boost::mutex/如何测试互斥锁是否被锁定

php - 使用 Foreach 用数组更新 MySQL 表

c# - 为什么我们不能分配一个 foreach 迭代变量,而我们可以用访问器完全修改它?

c++ - 在编译时使用给定函数初始化普通二维数组

c++ - 如何判断 popen() 是否成功?

c++ - 如何对每个 block 的元素多于线程的数组执行并行扫描?

c++ - 我无法获取 token 的字符串值

C++ 建立链接步骤 : Undefined symbols for architecture x86_64