Есть ли разница между следующими объявлениями?
void somefunc(const Person &p);
void somefunc(Person const &p);
Есть ли разница между следующими объявлениями?
void somefunc(const Person &p);
void somefunc(Person const &p);
существует без разницы. const
привязывается к типу слева от него, если только он не является первой частью объявления, и в этом случае он связывается с ним.
Смотрите: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt
Лично я считаю, что const T &x
читается лучше. Согласно this, Бьярне также предпочитает сначала поставить const
. В частности, поскольку ключевое слово изначально собиралось называться readonly
и readonly int x
, читается лучше: -P.
Да, есть! первая из них более читаема:)
Смотрите этот 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 & Икс. Однако, реальный вопрос заключается в том, что должно быть б.
Прочитайте остальную часть статьи для получения дополнительной информации. Но, по сути, в нем говорится, что они эквивалентны, и вы можете использовать любой из них по своему усмотрению. Однако вы должны выбрать один и придерживаться его, чтобы избежать путаницы в будущем.
Это действительно вопрос вкуса.
Если читать справа налево, "Person const & x
" читает "x - ссылка на постоянное лицо".
Звучит лучше, чем "const Person & x
", что будет "x является ссылкой на постоянное лицо".
Итак, если вы знакомы с направлением чтения справа налево объявлений переменных, возможно, предпочтете первую.
Оба одинаковы.
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, вероятно, лучший способ!