基于C++范围的循环,是否被复制容器?

Mic*_*erg 0 c++ for-loop

在C++中,允许迭代容器的每个元素(例如,让我们使用一个向量),就像在

vector<CustomObject> container;
//push back some objects in container

for(CustomObject obj : container){
    //process obj
}
Run Code Online (Sandbox Code Playgroud)

我有一个关于"for"行为的问题:是否将容器复制用于for或通过引用访问?

小智 8

容器未被复制.它是通过引用访问的.但是,CustomObject正在为每个循环复制.编译器可以优化掉副本,但这不能保证.

要防止CustomObject在此示例中进行复制,请执行以下操作:for(CustomObject& obj : container)

  • 应该是`const CustomObject&`,除非需要修改值. (4认同)