'increment1 (int & amp; value) `принимает' ссылку на l-значение '. До C ++ 11 мы узнали только о «ссылках». Все ссылки были на l-значения.
Что такое l-значение? Упрощенное определение l-значения - это то, что компилятор может предоставить адрес. Таким образом, переменная, такая как value
, имеет физическое место хранения (при условии, что ее местоположение в памяти не было оптимизировано).
Скаляр, такой как 5 или даже сумма двух переменных, например, x + y
не имеют областей памяти. Компилятор не хранит 5 в памяти. Скорее, он перемещает 5
в место хранения для number
. Компилятор не хранит x + y
как область памяти. Опять же, в упрощенном виде 5
- это понятие, а (x + y) - это понятие - это r-значения. Ссылки на R-значения являются вторым типом ссылки [здесь не обсуждается].
Возвращаясь к вашему превосходному примеру, int &value
описывает ссылку на значение l, потому что value
относится к месту в памяти.
Функция main () (при условии отсутствия оптимизации)
number
как int и выделяет память для числа. В большинстве 32-битных и 64-битных систем для байта выделяется 4 байта памяти. 5
в ячейку памяти для номера. main()
теперь вызывает increase1()
, передавая место хранения номера. Переменная передается по ссылке, что означает, что адрес передается в increase1
. main()
знает, как передать адрес, потому что `increment1 () принимает ссылку на l-значение. increase1()
получает адрес числа и разыменовывает его, чтобы получить значение 5, добавляет один к разыменованному указателю, а затем сохраняет результат обратно в местоположение, указанное как number
. Ссылки на L-значения позволяют функции вызываемого напрямую изменять хранилище, принадлежащее вызывающему.
Обратите внимание, что адреса хранения передаются. Адреса могут быть из стека main () или из кучи (выделенной новым). В этом примере main () выделяет number
из стека, но не обязательно из стека.
Очень скучный способ сказать, что ссылка на l-значение будет передаваться с использованием адресов, если только компилятор не признает, что он может сделать это быстрее посредством оптимизации. Если компилятор оптимизирует фактическое прохождение ссылок, логическое понимание все равно будет верным.
Установка переменной среды РЕДАКТОРА к 'gvim-f', кажется, работает.
set EDITOR=gvim -f