【发布时间】:2013-01-26 06:03:20
【问题描述】:
我正在使用 Visual Studio 2010。我想使用的一个功能是 VS2010 中遗漏但包含在 VS2012 中的是基于范围的 for 循环。
在 VS2012 中,您可以做整洁且超级整洁的 for 循环,例如:
for( auto& it: myElements )
it->something();
到目前为止,我在 VS2010 中最接近的语法是这样的:
for( auto it = myElements.begin(), end = myElements.end(); it != end; it++ )
it->something();
在阅读了一些相关问题后,我发现使用 boost\foreach 我可以访问以下宏:
BOOST_FOREACH( auto it, myElements ){
it.something();
}
我对这种方法的问题是它提供了一个副本(或类似的东西),而不是一个指针。这是我感到困惑的地方。 foreach reference 表示以下内容:
它不进行动态分配,不进行虚函数调用或 通过函数指针调用,并且不调用不是 对编译器的优化器透明。
这是什么意思?不是副本吗?
如何从 BOOST_FOREACH 获取指针?或者我应该使用其他一些增强功能吗?
我在这里的其他问题中看到过这种语法:
BOOST_FOREACH( auto& it, myElements ){
it->something();
}
但是这并不能为我编译并在编辑器中引发错误。这有什么问题?为什么我在这里发现它是许多其他问题的有效代码?
在 VS2010 中是否有针对基于范围的 for 循环的漂亮而整洁的解决方案? (包括使用 boost)
【问题讨论】:
-
不相关,但使用 for range 循环,您不必取消引用任何内容。
-
如果我尝试以
it.setSomething( 0 )的方式修改任何内容,它就会消失。 -
你知道有些迭代器在修改后会失效吗?
-
我猜这是一个参考?此外,请使用
std::for_each。
标签: c++ visual-studio-2010 visual-c++ boost c++11