Они не эквивалентны - c.reference
- это int&
, тогда как d.reference
- это const int&
(не то, чтобы вы могли использовать этот синтаксис для доступа к typedefs, но вы могли бы захватить тип с помощью вывода аргумента шаблона и сообщитьРазница).
Но я уверен, что у Тенфура есть ключевое замечание: «На c
нет мутаций, которые не влияют на элементы».Итак, что касается всего, что вы на самом деле делаете с массивами, они одинаковы, у них просто разные метаданные из-за их разных типов.
Основной случай, который я могу придумать, гдеРазница заключается в том, что вы используете сам тип в интерфейсе (в отличие от параметра итератора или шаблона диапазона).Я бы сказал, что, принимая его в качестве указателя или ссылочного параметра, вы должны const-квалифицировать сам тип array
, поскольку он ничего не стоит и позволяет вызывающей стороне использовать вашу функцию независимо от того, какой выбор они сделали.Вы можете const-квалифицировать тип элемента, но какой бы из них вы ни использовали, он несовместим с другим, поэтому в основном каждый должен договориться о том, какой использовать, иначе потребуется копирование.Это требует активной координации в отношении стиля, я думаю, так как я сомневаюсь, что вы заставите всех в мире согласиться, что лучше.const int
, вероятно, имеет лучший случай, по принципу, что вы должны const
все, что можете, но я ожидаю, что int
- это то, что будут использовать люди, которые вообще не думали об этом, поскольку они привыкли ко всемте контейнеры C ++ 03, которые не могут иметь тип значения const
.