Почему переменный спецификатор классифицируется как спецификатор класса хранения, но не является классификатором?

Когда спецификатор mutable используется в объявлении нестатического элемента данных, данные изменяются независимо от того, рассматривается ли остальная часть объекта как const. С этим фактом мы можем легко создать впечатление, что спецификатор mutable является тем же самым типом, что и const, который оказывается неверным. Фактически, язык классифицирует спецификатор mutable как спецификатор класса хранения. Это довольно противоречиво, потому что mutable не определяет продолжительность хранения.

Каковы обоснования этого дизайнерского решения?

Что сделало бы его менее логичным, чем казалось бы, если mutable был квалификатором?

В чем преимущества создания спецификатора класса хранения?

Ответ 1

cv-qualifiers модифицируют/ограничивают семантику объекта; mutable нет. Это часть типа будет излишней практически во всех сценариях, в то же время требуя больше абзацев о конверсиях указателей и т.д.

Таким образом, было принято решение сделать его спецификатором-указателем, который не является спецификатором типа. Поскольку const может привести к тому, что объект будет помещен в защищенную от записи память, mutable может привести к тому, что объект не будет помещен в такое хранилище, что указывает на его спецификацию класса хранения.