Переписав мой комментарий как ответ, надеюсь, он кому-нибудь поможет.
Нет смысла объявлять объект const, если он не инициализирован в какой-либо форме.
Рассмотрим следующий код:
const int x;
clang говорит: error: default initialization of an object of const type 'const int'
.
г cc сказал бы: error: uninitialized const ‘x’ [-fpermissive]
Логика c в этом заключается в том, что в этом типе нет смысла декларации.
Значение x
никогда не может измениться, и поэтому этот код будет непредсказуемым, поскольку x
будет отображен в неинициализированную память.
В вашем примере добавление ключевого слова mutable
к value
означает, что, хотя экземпляр Some
является константой, если объявлен как:
const Some some;
, все еще возможно изменить value
в более позднее время.
Например:
some.value = 8;
Это означает, что можно использовать этот код предсказуемым образом, поскольку value
можно установить позже и неинициализированные константы отсутствуют.