В языке есть только две категории типов, которые не может иметь const-квалификацию: ссылочные типы и типы функций. Таким образом, если const T
не может быть типом с константой, это означает, что T
является либо типом функции, либо ссылочным типом. Если вы можете исключить ссылочные типы, то у вас останутся только типы функций.
Обратите внимание, что тип функции, который содержит квалификатор cv, такой как int(int) const
, равен , а не a конст-квалифицированный тип. Это пример «отвратительного типа функции», единственное реальное использование которого состоит в том, чтобы составлять или разлагать типы указателей на члены-функции. Тип int(int) const
нельзя получить, добавив const-квалификацию поверх int(int)
. Скорее, const
применяется к подразумеваемому параметру объекта.