使用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()
有任何危险吗?
答案 0 :(得分:14)
虽然BOOST_FOREACH是一个宏, 这是一个非常乖巧的人。 它准确地评估了它的论点 曾经,没有令人讨厌的惊喜
答案 1 :(得分:1)
只要您想以简洁的方式遍历事物,就可以使用BOOST_FOREACH
。考虑Boost.Range使用BOOST_FOREACH遍历您自己的类。
我使用BOOST_FOREACH
来防止使用for
语句,迭代器(声明启动等等)污染代码
我尽可能地使用STL算法(cogweels)和boost lambda表达式(胶水)。它使代码比自定义for循环更容易理解。