Кто-нибудь может сказать мне, в чем разница между
void fun(MyClass &mc);
а также
void fun(MyClass& mc);
в С ++?
Как дано нет.
Первоначально C позволил бы:
int x, *y;
Объявить оба int
, x
и указатель на int, y
,
Следовательно, часть определения типа — бит, который делает его указателем — может быть отделена от другой части.
С ++ скопировал это оптом.
Затем ссылки были добавлены, и они получили аналогичный стиль объявления за исключением &
скорее, чем *
, Это означало, что оба MyClass &mc
а также MyClass& mc
были разрешены
На выбор, когда дело доходит до *
Струсуп писал:
Оба «правы» в том смысле, что
оба действительны C и C ++ и оба имеют
точно такой же смысл. Так далеко как
определения языка и тому
Компиляторы обеспокоены тем, что мы могли бы просто
а также скажите «int * p;» или «int * p;»Выбор между «int * p;» и «Int
* p; «не о правильном и неправильном, а о стиле и акценте.
выражения; декларации часто
считается чуть более
Необходимое зло. С ++, с другой
рука, имеет большой акцент на типах.«Типичный программист на C» пишет «int
* p; «и объясняет это» * p — это то, что является int «, подчеркивающий синтаксис, и может
указать на объявление C (и C ++)
грамматика, чтобы утверждать за правильность
стиля. Действительно, * связывает с
имя р в грамматике.«Типичный программист C ++» пишет
«int * p;» и объясняет это «р является
указатель на int «подчеркивающий тип.
Действительно, тип p — это int *. я
явно предпочитаю этот акцент и вижу
это так же важно для использования более
продвинутые части C ++ хорошо.Критическая путаница приходит (только)
когда люди пытаются объявить несколько
указатели с одной декларацией:int * p, p1; // вероятная ошибка: p1 is
не инт *Размещение * ближе к названию делает
не делать такого рода ошибки
значительно менее вероятно.int * p, p1; // вероятная ошибка?
Объявление одного имени на объявление
минимизирует проблему — в частности
когда мы инициализируем переменные.
Люди гораздо реже пишут:int * p = я; int p1 = p; // ошибка:
int инициализируется int *И если они это сделают, компилятор будет
Пожаловаться.Всякий раз, когда что-то может быть сделано в два
пути, кто-то будет смущен.
Всякий раз, когда что-то является вопросом
вкус, дискуссии могут затянуться
навсегда. Придерживайтесь одного указателя на
декларация и всегда инициализировать
переменные и источник путаницы
исчезает. Посмотреть дизайн и
Эволюция C ++ для дольше
обсуждение декларации С
синтаксис.
По расширению, когда дело доходит до &
, MyClass& mc
соответствует «типичному стилю C ++».
Для компилятора нет никакой разницы.
Первый ближе к обычному C-синтаксису, последний — больше C ++ — иш.