2

我有一个场景向量,vector<Scene>。作为参考或不作为参考,迭代元素的正确方法是什么?

例如这个:

BOOST_FOREACH(Scene scene, mScenes)
{
       .....
}

宏是在向量上的每次迭代中复制场景,还是在幕后使用参考?

那么它与此有什么不同:

BOOST_FOREACH(Scene& scene, mScenes)
{
       .....
}
4

3 回答 3

9

BOOST_FOREACH行为与你告诉他的完全一样,按值、引用或 const 引用

于 2012-12-24T14:10:23.803 回答
5

您的第一个示例确实复制了每个Scene. 最有可能的是,您想要第二个。使用第一个,您可以修改scene并且矢量将不受影响。如果您不修改向量,则应使用const Scene& scene. 如果是,请使用Scene &.

于 2012-12-24T14:10:32.570 回答
2

请注意,对于 C++11,您不需要使用 BOOST_FOREACH(一些返回一对迭代器的 boost 库除外)。

for(const Scene& scene: mScenes){}

适用于 BOOST_FOREACH 的规则相同:您很可能希望使用 const &,很少使用 &,并且从不复制。

于 2012-12-24T14:23:56.140 回答