首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有用基于范围的BOOST_FOREACH循环代替C++11的经验?

有没有用基于范围的BOOST_FOREACH循环代替C++11的经验?
EN

Stack Overflow用户
提问于 2012-08-22 10:16:11
回答 2查看 1.4K关注 0票数 6

您是否经历过用基于范围的BOOST_FOREACH循环替换for的过程?在机械操作时是否有任何问题(即不对周围的代码进行深入研究)。

背景:我确实有大约250 K行的源代码,是用10编译的(Visual 2010)。代码还使用来自boost库的BOOST_FOREACH。我只是在尝试VC++ 11 (VisualStudio2012RC),它还用auto实现了基于范围的for循环。

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

代码语言:javascript
复制
BOOST_FOREACH (element, container) {
    ...
}

..。并且期望elementbreak之后在循环中设置值。你还记得类似的问题吗?

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

谢谢你的帮助,佩尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-24 15:21:07

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

示例:

代码语言:javascript
复制
std::vector<int> v;
for (int i: v) ...

如果v更改为std::vector<long>std::vector<unsigned>,那么类型转换可能是不需要的;但是,编译器警告应该捕捉到这一点(特别是对于缩小转换)。另一方面,您可以在代码中进行(拓宽)转换:

代码语言:javascript
复制
std::vector<char> v;
for (int i: v) ...
票数 4
EN

Stack Overflow用户

发布于 2012-08-24 13:18:31

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12070952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档