您是否经历过将 BOOST_FOREACH
替换为基于范围的 for
循环的过程? 机械地(即没有对周围的代码进行深入研究)时是否有任何问题?
背景:我确实有大约 25 万行的源代码,是使用 Microsoft VC++ 10 (Visual Studio 2010) 编译的。该代码还使用了 boost 库中的 BOOST_FOREACH。我只是在尝试使用 auto
实现基于范围的 for
循环的 VC++ 11 (Visual Studio 2012 RC)。
到目前为止,我遇到过元素声明在BOOST_FOREACH
之外的情况(括号内没有声明):
BOOST_FOREACH (element, container) {
...
}
... 并且 元素
应该在 break
之后在循环中设置值。你能记得类似的问题吗?
当BOOST_FOREACH
包含声明时,你会选择用auto
代替显式类型吗?当一个人只是机械地重写 BOOST_FOREACH
而不是将显式声明留在那里时,这样做有什么好处吗?
感谢您的帮助, 彼得
最佳答案
auto
的优势与使用实际类型或引用类型不同的是,如果容器类型发生变化,代码将继续工作。如果您有意对间接容器迭代器的结果执行类型转换,这可能不是您想要的。
例子:
std::vector<int> v;
for (int i: v) ...
如果v
更改为 std::vector<long>
或 std::vector<unsigned>
那么类型转换可能是不需要的;仍然,编译器警告应该捕捉到这一点(特别是对于缩小转换)。另一方面,您可以使用用于(扩大)转换的代码:
std::vector<char> v;
for (int i: v) ...
关于c++ - 有没有用 C++11 中基于范围的 for 循环替换 BOOST_FOREACH 的经验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070952/