Вы правы, что i и k по сути являются одной и той же переменной.Однако в этой строке int f3(int i, int j)
вы передали переменную i
по значению, а не по ссылке.Это означает, что какие бы изменения вы ни сделали в i
в своей функции, они не будут сохранены в int main()
.
int f3(int i, int j) {
int& k = i; // k = 2 and it's a reference to the local variable i
++j;
return ++k; // k = 3, local variable i = 3
}
int main() {
int i = 2, j = 4, k;
k = f3(i, j); // k = 3, i and j are unchanged because they were passed by value
cout << "i: " << i << " j: " << j << " k: " << k << endl;
return 0;
}
Что вы сделали здесь int& k = i;
, вы создали ссылку k
на локальную переменную i
, которая является просто копией переменной i
из вашего int main()
.По сути, k
не наносит вреда i
с int main()
.