pep*_*epr 6 c++ boost visual-c++ c++11
你有没有经历过BOOST_FOREACH基于范围的for循环取代?机械地做这件事时是否有任何问题(即没有深入研究周围的代码).
背景:我有大约250K行的源代码,使用Microsoft VC++ 10(Visual Studio 2010)编译.该代码还使用了boost库中的BOOST_FOREACH.我只是尝试VC++ 11(Visual Studio 2012 RC),它也实现了基于范围的for循环auto.
到目前为止,我遇到了元素BOOST_FOREACH在括号外声明的情况(括号中没有声明):
BOOST_FOREACH (element, container) {
    ...
}
...并且element预计将在循环之后设置值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) ...
| 归档时间: | 
 | 
| 查看次数: | 1298 次 | 
| 最近记录: |