Для чего нужен амперсанд в параметре функции?
Подскажите пожалуйста какую роль играет амперсанд в параметре данной функции т.к программа работает корректно как с ним так и без него
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> T_summands;
void print_summands(int n_start,const T_summands& summands)
{
cout << n_start << "=";
for(T_summands::const_iterator summands_it = summands.begin(); summands_it != summands.end(); ++summands_it)
{
cout << *summands_it << (summands_it != summands.end() - 1 ? " + " : "\n");
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Для понимания - ну, считайте, что при передаче по ссылке вы просто передаете указатель, но вам не нужно все время его разыменовывать.
Типа
void f(int * x) { *x = *x * 2; }
...
int y = 4;
f(&y);
То же через ссылку -
void f(int& x) { x = x * 2; }
...
int y = 4;
f(y);
Это, конечно, приближение, но для понимания годится.
Когда вы передаете без ссылки, по значению - создается копия. Примерно так:
void f(int x) { x = x * 2; }
это как если бы (неточно! просто для понимания!!)
void f(int * y)
{
int x;
x = *y;
x = x * 2;
}
На "бытовом" уровне - переданное по значению не меняет то, что передано, по ссылке - меняется сама переданная переменная.
void f(int& x) { x = x * 2; }
...
int y = 4;
f(y); // Теперь y == 8
void f(int x) { x = x * 2; }
...
int y = 4;
f(y); // y == 4...