C++ 有从C+用基于范围的for循环替换BOOST#u FOREACH的经验吗+;11?

C++ 有从C+用基于范围的for循环替换BOOST#u FOREACH的经验吗+;11?,c++,visual-c++,boost,c++11,C++,Visual C++,Boost,C++11,您是否经历过用基于范围的for循环替换BOOST\u FOREACH的过程?机械地执行时是否存在任何问题(即没有深入研究周围的代码) 背景:我确实有大约25万行的源代码,使用Microsoft VC++10(Visual Studio 2010)编译。代码还使用BOOST库中的BOOST_FOREACH。我正在尝试VC++11(Visual Studio 2012 RC),它还实现了基于范围的for循环和auto 到目前为止,我遇到了元素在BOOST\u FOREACH之外声明的情况(括号中没有

您是否经历过用基于范围的
for
循环替换
BOOST\u FOREACH
的过程?机械地执行时是否存在任何问题(即没有深入研究周围的代码)

背景:我确实有大约25万行的源代码,使用Microsoft VC++10(Visual Studio 2010)编译。代码还使用BOOST库中的BOOST_FOREACH。我正在尝试VC++11(Visual Studio 2012 RC),它还实现了基于范围的
for
循环和
auto

到目前为止,我遇到了元素在
BOOST\u FOREACH
之外声明的情况(括号中没有声明):

。。。而
元素
应该在
中断
后在循环中设置值。你还记得类似的问题吗

BOOST\u FOREACH
包含声明时,您会选择用
auto
替换显式类型吗?如果只是机械地重写
BOOST\u FOREACH
而不是将显式声明留在那里,那么这样做有什么好处吗

谢谢你的帮助, 彼得

您会选择用自动替换显式类型吗


是的,但是如果类型是例如
int&
,那么我将用
auto&
替换它,否则导出的类型将不是引用。

与使用实际类型或引用类型相比,
auto
的优点是,如果容器类型发生更改,代码将继续工作。如果您有意对间接指向容器迭代器的结果执行类型转换,那么这可能不是您想要的

例如:

std::vector<int> v;
for (int i: v) ...

我不认为<代码>和<代码>是<代码> Auto <代码>的一部分,因为任何数据类型的元素都可以被访问或通过值或通过引用访问。我的问题是,用
auto
替换显式数据类型是否会带来任何好处。更好的说法是,如果可以通过IDE中的正则表达式替换
BOOST\u FOREACH
,那么用
auto
额外替换类型是否有意义。主要的优点是,如果您以后更改容器类型,使用
auto
您不需要更新循环变量。您可以节省时间,让代码与显式类型一起工作,这种选择没有错。我知道,当输入新代码时,
auto
是赢家——就像您编写的代码一样。但是,如果将显式类型保留为
auto
,我会感到更安全。首先,这需要更多的努力,其次,我可以在编辑时引入人为错误。(有很多<代码> BooStY-PROXACH <代码>,并且我不能查看每种情况下的代码。无论如何,你会考虑我决定把新的< <代码>中的显式数据类型保持在< /COD>循环中吗?这是没有问题的。”如果以后更改容器类型,则需要注意这一点。
std::vector<int> v;
for (int i: v) ...
std::vector<char> v;
for (int i: v) ...