В настоящее время я беру курс на концепции языков программирования, где я наткнулся на вопрос, который оставил меня путают однажды (когда я смотрел на видео Martin Odersky's functional programming course on Coursera):Связаны ли разные значения отношения «по вызову»?
Термин «вызов по -значение»постоянно используется в двух различных контекстах:
Контекст 1: Оценка режима (Call по значению против вызова по имени)
Если функция передается выражение как аргументом, является то, что выражение сводится к значению (т. е. оценивается) перед идентификаторами параметра в тело функции заменено на него? Если это так, это называется «позывным», если нет, это вызов по имени. По крайней мере, так я это понимаю.
Контекст 2: передача параметров (Call по значению против вызова по ссылке)
Если функция передается идентификатор в качестве аргумента, это тело функции оценивается с новым имя привязки, которое указывает на копию того, на что указывает данный идентификатор, или может ли функция действительно вносить изменения в то, что указывает идентификатор, т. е. изменения, которые являются «видимыми» для вызывающего контекста? Опять же, первый вариант был бы по умолчанию, а второй - вызовом по ссылке. Если, я понял это правильно.
Однако, несмотря на то, что я не вижу связи между двумя вариантами использования термина «вызов по значению», кажется, что слишком много совпадений для того, чтобы этот термин использовался в обоих сценариях случайно.
Кто-нибудь знает, почему один и тот же термин был выбран для двух (казалось бы, разных) вопросов?
Вызов по ссылке - это вызов по значению со значением, являющимся ссылкой. – Sylwester
Оба кажутся для меня очень похожими. Оба дела в основном сводятся к: * - это буквальная вещь, передаваемая в функцию, или только любое значение, которое буквально оценивает. * – deceze
Да, кажется, что «значение» в обоих контекстах означает разные вещи. В первом случае «значение» является результатом оценки выражения. Принимая C++, который не использует позывной, в 'void f (int &i); int main() {f (* (новый int));}' значение "(как в первой категории) относится к объект/указывает на место хранения, но мы используем pass-by-reference, потому что во втором контексте «значение» означает то, что содержит место хранения, в отличие от самого местоположения. –