Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
参考向量 我正在学习C++,我有问题要理解为什么它会起作用。我知道引用只是某个对象的同义词。但我不明白这是为什么 std::vector<int> v{1,2,3}; for (auto &i : v) //using reference i *= i;_C++_Reference - Fatal编程技术网

参考向量 我正在学习C++,我有问题要理解为什么它会起作用。我知道引用只是某个对象的同义词。但我不明白这是为什么 std::vector<int> v{1,2,3}; for (auto &i : v) //using reference i *= i;

参考向量 我正在学习C++,我有问题要理解为什么它会起作用。我知道引用只是某个对象的同义词。但我不明白这是为什么 std::vector<int> v{1,2,3}; for (auto &i : v) //using reference i *= i;,c++,reference,C++,Reference,输出1,2,3 提前谢谢你原因也一样: int a=2; int &b=a; b=3; 为什么最终将a设置为3,但是: int a=2; int b=a; b=3; a仍然是2,只有b是3 向量本身是不相关的,这与引用的基本概念有关。引用为被引用对象创建别名。“非引用”将创建一个新对象自动&i创建引用auto i创建一个新对象,并通过复制另一个对象的值来初始化它,在本例中,向量中的每个值。该引用实际上是对内存中某个对象的引用 因此,当您执行auto&i时,您将创建对对象的引用

输出
1,2,3


提前谢谢你

原因也一样:

int a=2;

int &b=a;

b=3;
为什么最终将
a
设置为3,但是:

int a=2;

int b=a;

b=3;
a
仍然是
2
,只有
b
是3


向量本身是不相关的,这与引用的基本概念有关。引用为被引用对象创建别名。“非引用”将创建一个新对象<代码>自动&i创建引用
auto i
创建一个新对象,并通过复制另一个对象的值来初始化它,在本例中,向量中的每个值。

该引用实际上是对内存中某个对象的引用

因此,当您执行
auto&i
时,您将创建对对象的引用(在这种情况下,它是来自向量的元素)。 对被引用对象(即向量的元素)执行任何操作
i*=i
更改元素的值,因为
i
是对该元素的引用

当您执行
autoi
时,您将创建一个新的变量(对象),该变量存储在堆栈上。该对象仅存在于for循环的范围内。因此,对其所做的更改不会影响任何其他数据

希望这有帮助。

这回答了您的问题
int a=2;

int b=a;

b=3;