Константные опорные параметры

Есть ли разница между следующими объявлениями?

void somefunc(const Person &p);
void somefunc(Person const &p);

Ответ 1

существует без разницы. const привязывается к типу слева от него, если только он не является первой частью объявления, и в этом случае он связывается с ним.

Смотрите: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt

Лично я считаю, что const T &x читается лучше. Согласно this, Бьярне также предпочитает сначала поставить const. В частности, поскольку ключевое слово изначально собиралось называться readonly и readonly int x, читается лучше: -P.

Ответ 2

Да, есть! первая из них более читаема:)

Ответ 3

Смотрите этот http://www.parashift.com/c++-faq-lite/const-correctness.html

(вместо ссылки: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt)

В частности, от 18,6 до 18,8.

[18,6] Что означает "const Fred & x" означает?

Это означает, что x имеет псевдоним объекта Fred, но x не может использоваться для изменения этого объекта Fred.

[18.7] Имеет ли смысл "Fred & const x"?

Нет, это абсурд.

[18.8] Что означает "Fred const & x"?

Fred const & x функционально эквивалент const Fred & Икс. Однако, реальный вопрос заключается в том, что должно быть б.

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

Ответ 4

Это действительно вопрос вкуса.

Если читать справа налево, "Person const & x" читает "x - ссылка на постоянное лицо".

Звучит лучше, чем "const Person & x", что будет "x является ссылкой на постоянное лицо".

Итак, если вы знакомы с направлением чтения справа налево объявлений переменных, возможно, предпочтете первую.

Ответ 5

Оба одинаковы.

const Person и x в настоящее время являются самыми популярными, потому что английский ставит прилагательные перед существительными, и это делает его "более похожим на английский".

Альтернативная форма Person const и x была предложена как менее идиоматическая форма. Их аргумент заключался в том, что эта форма всегда может быть проанализирована справа налево, "х - ссылка на человека-константа". Аргумент заключался в том, что ясность разбора важнее, чем идиоматическая структура.

К сожалению, для этих людей их форма не справляется со всем. Как только вы начнете видеть массивы и указатели функций и другие экзотические формы, правила начинают разрушаться. char * str [10] не может быть записана в форме справа налево, потому что массив должен быть справа. void (* signal (int, void (* fp) (int))) (int) дает право левым людям сжиматься от боли.

Только правило, которое когда-либо возникало, чтобы понять все типы, правило по часовой стрелке: http://c-faq.com/decl/spiral.anderson.html

Обычно, когда кто-то видит спираль по часовой стрелке, все надежды на ясное правило синтаксического анализа выходят из окна. Большинство людей тогда принимают, что const Person & x, вероятно, лучший способ!