这是我的代码。根据打印结果,没有区别,那么&符号在这里播放什么?
#include <stdio.h>
#include <iostream>
#include <Windows.h>
int main(void)
{
std::cout << "Print test data\n" << std::endl;
int a[5] = { 23,443,16,49,66 };
for (auto &ii : a)
{
std::cout << "auto ii: " << ii << std::endl;
}
printf("\n");
for (auto jj : a)
{
std::cout << "auto jj: " << jj << std::endl;
}
system("pause");
}
答案 0 :(得分:3)
自动for(auto x : range)
:此用法将创建范围内每个元素的副本。
自动&,for(auto& x : range)
:当您要修改范围内的元素(不进行代理类引用处理)时,请使用自动&。
ii
是一个引用,因此在循环体中,如果修改了ii
,则a
中的相应元素也将被修改。
jj
不是参考。在每个循环中,它是相应元素的副本。其修改不会影响a
中的相应元素。由于每个循环都会创建一个副本,因此会带来系统开销。
如果要确保未修改a
中的数据并且想提高效率,可以使用const auto & ii : a
格式。