Ссылочные переменные в C ++ - PullRequest
1 голос
/ 24 июня 2010

Почему ссылочные переменные отсутствуют / не используются в C?

Почему они предназначены для C ++?

Ответы [ 6 ]

6 голосов
/ 24 июня 2010

Потому что C был изобретен первым.Я не знаю, думали ли они о ссылках в то время (в основном они не нужны), или была какая-то особая причина не включать их (возможно, сложность компилятора).Они, безусловно, гораздо более полезны для объектно-ориентированных и универсальных конструкций, чем процедурный стиль C.

5 голосов
/ 24 июня 2010

Ссылочные аргументы были изначально придуманы, AFAIK, с одной стороны: семантика перегрузки операторов .Например, оператор [] просто должен возвращать ссылку.

Тогда был предмет большой дискуссии о том, следует ли использовать «скрытый указатель» для чего-либо еще.

Во многих документах по соглашениям о разработке многих компаний говорится, что «никогда не используйте ссылки. Если вам нужен указатель, скажите так».

Однако было обнаружено, что ссылки имеют одно важное преимущество (нет,не синтаксис сахар).Вот что: ссылка гарантированно действительна, если только вы не усердно работаете, чтобы ее сломать.

Лично я до сих пор не понимаю, почему я не могу сделать это в C ++:

int a1, a2;
int &b = a1;
&b = a2; // Error. address of referenced is not an lvalue. Why?!
1 голос
/ 24 июня 2010

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

1 голос
/ 24 июня 2010

Как вы, возможно, знаете, C предшествует C ++ примерно на десять лет. Ссылки были функцией, представленной в языке C ++. Некоторые функции языка C ++ были приняты последующими версиями стандарта C (такими как const и // comment). Концепция ссылок не была до сих пор.

Можно предположить, что их полезность в объектно-ориентированном программировании не столь полезна для процедурного программирования на C.

1 голос
/ 24 июня 2010

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

0 голосов
/ 24 июня 2010

Я думаю, что C родился с минималистской шляпой, а ссылки - просто синтаксический сахар для указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...