С точки зрения теории языка программирования, в C ++ такие классификаторы как const
а также volatile
позволяют выразить форму подтипа, например, int
будучи подтипом const int
,
Мне было интересно, могли бы мы также рассмотреть этот реф-квалификатор &
а также &&
позволяют выразить форму подтипа или нет. Другими словами, можем ли мы считать, что T
, T&
а также T&&
связаны отношением подтипов или нет, с точки зрения теории языка программирования? И если да, то что это за отношения?
Хотя вы можете считать CV-квалификаторы «подтипами» в некоторых определениях, ссылки не являются. const T t = some_t;
создает новый объект типа T
объявлен как const
, Вы можете думать об этом как о создании нового const T
но в любом случае вы создаете новый объект, значение которого концептуально является копией существующего.
T &t = some_t;
не создает новый объект. Это создает ссылка на существующий объект. Это принципиально иная вещь в C ++. Ссылки не являются объектами; язык очень ясно об этом. И бесполезно думать о ссылке как о «подтипе».
int
будучи подтипомconst int
Ну, не очень понятно, о чем вы спрашиваете, но, похоже, все наоборот, так как другие формы подтипы int
с помощью const
или же volatile
добавит больше ограничений, чем исходный тип (значение).