Где разместить ‘& amp;’ в параметре функции?

Кто-нибудь может сказать мне, в чем разница между

void fun(MyClass &mc);

а также

void fun(MyClass& mc);

в С ++?

5

Решение

Как дано нет.

Первоначально 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 ++».

8

Другие решения

Для компилятора нет никакой разницы.

Первый ближе к обычному C-синтаксису, последний — больше C ++ — иш.

5