Thera - две переменные с одинаковым именем x .Глобальный x: ":: x" и локальный "x".
f(::x) = h(x);
Эта строка преобразуется в 3 операции:
- h (x) -> -1 * 2 -> возвращает -2 и x = -2
- f (:: x) -> f (6) -> :: x = 12 и возвращает ссылку на ':: x'
- :: x = -2
cout << f(x) << " " << g(x) << " " << h(x) << " " << x << " " << ::x << endl;
В этой строке порядок оценки вызовов не указан, поэтому значения, отображаемые на консоли, могут отличаться.Например, мой вывод:
-5 -2 -4 -5 -1
-10 -1 -10 -10 0
Вы должны понимать основные правила:
int h(int &x);
int & x - означает, что x не копия, это ссылка .Если вы измените эти переменные внутри функции - она изменится снаружи.
int g(int m);
int m - означает, что m является копией.Изменения внутри функции не влияют на нее снаружи
int & f(int &x);
Это означает, что функция возвращает ссылку на некоторую переменную.