Правильное использование 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 ответа
И хотя BOOST_FOREACH является макросом, он замечательно хорошо себя ведет. Он оценивает свои аргументы ровно один раз, что не приводит к неприятным сюрпризам
Ты можешь использовать BOOST_FOREACH
всякий раз, когда вы хотите пройтись, кратко. Рассмотрим Boost.Range для обхода ваших собственных классов с помощью BOOST_FOREACH.
я использую BOOST_FOREACH
предотвратить загрязнение кода for
операторы, итераторы (инициализация деклараций и т. д.). Я использую алгоритмы STL (зубчатые колеса) с лямбда-выражениями boost (клей), насколько я могу. Это делает код более понятным, чем пользовательский цикл for.