auto 和 auto& 有什么区别?

Jea*_*SFT 0 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");

}
Run Code Online (Sandbox Code Playgroud)

Sua*_*SFT 5

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

ii是一个引用,所以在循环体内,如果ii修改了,相应的元素a也会被修改。

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

如果你想保证 中的数据a不被修改,并且想提高效率,可以使用表单const auto & ii : a