Обычно такая ситуация:
Для каждого окна API существует более одного C++ объекта окна.
Объект C++ window не может быть скопирован (в том числе, что он не является клонированным).
В этом случае можно использовать const
в интерфейсе объекта С ++, таким образом, чтобы клиентский код не дают состояния с изменением гарантии, например, объявляя некоторый параметр как const
.
Однако, как только одно или оба ограничения удаляются, оно становится бесполезным и бессмысленным упражнением. Рассмотрим, например, удаление второго ограничения, что делает объекты C++ скопируемыми. Возможно, это имеет смысл, рассматривая объекты C++ почти как shared_ptr
экземпляры (за исключением уничтожения).
Но любой const shared_ptr
может быть скопирован на номер const
, поэтому любые вызовы без const
могут быть вызваны. Например, shared_ptr::get
- это метод const
, так что он может быть вызван на объект const shared_ptr
. Но его результат равен T*
, то есть нет const
распространения на результат, потому что даже если он был T const*
, он бы не ограничивал клиентский код: клиентский код мог просто скопировать const shared_ptr
на номер const
, а затем позвонить get
на не const
экземпляр.
Тем не менее, с обеими gurantees выше в месте с тем, что const
(или в случае отсутствие const
) может использоваться в возможно полезном способе ограничить операции на упомянутое окне API, не означает, что он это обязательно хорошая идея.
В частности, объекты, представляющие окна, обычно являются приемниками событий, и, по моему опыту, события не очень хорошо сочетаются с const
.
Однако большинство программистов используются для чистых инспекторов является const
. И для этого использования, просто улучшая читабельность кода, я бы рекомендовал методы const
. Например, инспектор, который возвращает размер окна, на мой взгляд лучше будет const
, чем не const
.
Согласен. Даже если это можно технически сделать, было бы трудно утверждать, что это не нарушает понятие «константы» для этого. –
Думая об этом, было бы полезно иметь функции, которые имеют функции «const Window &», зная, что эти функции могут смотреть только на окно, а не изменять его вообще. – jcoder