为什么在这种情况下通过左值引用合适?

问题描述 投票:0回答:1
#include <iostream>
#include <vector>
using namespace std;
int main()
{
        vector <int> arr {12,13,14,15,16};
        for (auto & x: arr)
        {
                ++x;
                cout << x << " ";
        }

return 0;
}

VS

#include <iostream>
#include <vector>
using namespace std;
int main()
{
        vector <int> arr {12,13,14,15,16};
        for (auto x: arr)
        {
                ++x;
                cout << x << " ";
        }

return 0;
}

输出保持不变,我们得到矢量中每个值的增量为1。但是我的教科书说了这一点。Text Book Image当我的教科书上说“ x假定向量中每个值都有一个副本”时,这是什么意思?

这里是屏幕截图中输出的代码Code Output第一个输出是&第二个输出不带&

c++ pass-by-reference lvalue
1个回答
0
投票

我认为您需要更改矢量元素(将它们递增1),因此,如果按值传递矢量元素,则循环将使用矢量元素的副本,而不是元素本身。

因此,您必须使用对矢量元素的引用。

您可以通过使用注释中的提示来确保这一点。


0
投票

输出保持不变

添加参考(&),如果您删除参考(&),则仅传递x的值,而不传递x本身,因此,如果您有以任何方式更改x的代码,需要通过引用传递它,否则您只更改一个局部变量,而不是原始变量。因此,如果再次打印矢量,您将看到版本中没有参考的结果将不会更改。

© www.soinside.com 2019 - 2024. All rights reserved.