在 C++ 中,可以在 for-each 语句中使用引用变量,例如for (int &e : vec)
where&e
是对 的值的引用e
。这使人们能够更改在 for-each 循环中与之交互的元素的值。Java中是否有等效的构造?
下面是一个如何在 C++ 的 for-each 循环中使用引用变量的示例。
#include <iostream>
#include <vector>
int main()
{
// Declare a vector with 10 elements and initialize their value to 0
std::vector<int> vec (10, 0);
// e is a reference to the value of the current index of vec
for (int &e : vec)
e = 1;
// e is a copy of the value of the current index of vec
for (int e : vec)
std::cout << e << " ";
return 0;
}
如果在第一个循环中没有使用引用运算符 ,&
则对 1 的赋值将仅对作为e
的当前元素的副本(而不是引用)的变量进行赋值,vec
即使一个变量&
不仅可以从向量中读取,而且还在 for-each 循环中写入向量。
例如,下面的 Java 代码不会修改原始数组,而只是一个副本:
public class test {
public static void main(String[] args) {
test Test = new test();
int[] arr = new int[10];
for (int e : arr) // Does not write to arr
e = 1;
for(int e : arr)
System.out.print(e + " ");
}
}