您是否经历过用基于范围的BOOST_FOREACH循环替换for的过程?在机械操作时是否有任何问题(即不对周围的代码进行深入研究)。
背景:我确实有大约250 K行的源代码,是用10编译的(Visual 2010)。代码还使用来自boost库的BOOST_FOREACH。我只是在尝试VC++ 11 (VisualStudio2012RC),它还用auto实现了基于范围的for循环。
到目前为止,我遇到了在BOOST_FOREACH之外声明元素的情况(括号中没有声明):
BOOST_FOREACH (element, container) {
...
}..。并且期望element在break之后在循环中设置值。你还记得类似的问题吗?
当BOOST_FOREACH包含声明时,会选择用auto替换显式类型吗?如果只是机械地重写BOOST_FOREACH而不是将显式声明留在那里,那么这样做有什么好处吗?
谢谢你的帮助,佩尔
发布于 2012-08-24 15:21:07
与使用实际类型或引用类型相比,auto的优点是,如果容器类型更改,代码将继续工作。如果有意对容器迭代器的指向执行类型转换,则这可能不是您想要的结果。
示例:
std::vector<int> v;
for (int i: v) ...如果v更改为std::vector<long>或std::vector<unsigned>,那么类型转换可能是不需要的;但是,编译器警告应该捕捉到这一点(特别是对于缩小转换)。另一方面,您可以在代码中进行(拓宽)转换:
std::vector<char> v;
for (int i: v) ...发布于 2012-08-24 13:18:31
您会选择自动替换显式类型吗?
是的,但是如果类型是int&,那么我将用auto&替换它,否则推导的类型将不是引用。
https://stackoverflow.com/questions/12070952
复制相似问题