auto和auto&有什么区别?

时间:2019-08-21 07:06:53

标签: c++

这是我的代码。根据打印结果,没有区别,那么&符号在这里播放什么?

#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");

}

1 个答案:

答案 0 :(得分:3)

自动for(auto x : range):此用法将创建范围内每个元素的副本。
自动&,for(auto& x : range):当您要修改范围内的元素(不进行代理类引用处理)时,请使用自动&。

ii是一个引用,因此在循环体中,如果修改了ii,则a中的相应元素也将被修改。

jj不是参考。在每个循环中,它是相应元素的副本。其修改不会影响a中的相应元素。由于每个循环都会创建一个副本,因此会带来系统开销。

如果要确保未修改a中的数据并且想提高效率,可以使用const auto & ii : a格式。