Является ли C ++ единственным языком, который имеет как указатели, так и ссылки? - PullRequest
1 голос
/ 15 декабря 2009

Среди языков программирования, которые я знаю, и тех, с которыми я сталкивался, C ++ выглядит как единственный, в котором есть и указатели, и ссылки. Это правда?

Ответы [ 4 ]

4 голосов
/ 15 декабря 2009

Алгол 68 и Паскаль, безусловно, делают. IIRC, Ада тоже, хотя я не помню всех деталей. PL / I сделал то же самое - он (легко) был первым, кто включил оба.

Ссылки на Алгол-68 были действительно больше похожи на указатели C ++. В C ++, когда вы инициализируете ссылку, она всегда ссылается на один и тот же объект. В Алголе 68 вы могли бы «переустановить» ссылку, чтобы она ссылалась на другой объект.

Прошло много времени с тех пор, как я использовал Pascal, но если память обслуживает, он использует только ссылки для передачи параметров (т.е. параметр var передается по ссылке). Я не думаю, что вы можете создать ссылку, кроме как в качестве параметра.

Ada позволяет пометить параметры как in, out или inout. Если я правильно помню, некоторые inout параметры копируются в функцию, а затем копируются обратно вызывающей стороне в конце, но другие передаются по ссылке. Как я уже сказал, я не помню деталей.

2 голосов
/ 15 декабря 2009

Google's Go имеет оба. Ломтики являются ссылками. Я думаю, что он не такой универсальный и чистый, как в C ++, где вы часто можете выбирать между указателем и ссылкой.

1 голос
/ 15 декабря 2009

C # имеет нечто похожее, в том числе unsafe методы, которые могут содержать указатели. Хотя указатели в C # несколько более ограничены.

0 голосов
/ 15 декабря 2009

C ++ - единственный язык, который имеет то, что C ++ называет указателями и ссылками, да. Точно так же, как Java - единственный язык, который имеет классы Java, так и Python - единственный язык, который имеет функции Python.

Многие языки имеют что-то , называемое ссылками, но они редко бывают одинаковыми.

В C # есть нечто, называемое ссылками, которое не ведет себя как ссылки на C ++, и если вы используете небезопасный код, оно также имеет что-то, называемое указателями (которые опять-таки не определяются точно так же, как указатели C ++)

Так что на самом деле это бессмысленный вопрос. Ни один другой язык не имеет точных возможностей C ++, нет. Но многие языки имеют похожих функций под теми же именами.

...