Я читаю книгу Рави Сетхи о концепциях языка программирования, и там написано
int *i1; int *i2;
После этих объявлений типы i1 и i2 не совместимы с именами. В
язык, который использует совместимость типов имен, переменные i1 и i2 не могут быть
сравнивать или назначать друг другу.
Интересно, почему они не совместимы по названию? Они имеют одинаковый тип имени: int. Может кто-нибудь объяснить это и привести пример правильной эквивалентности чистого имени? Спасибо
Ни один из них не имеет типа int
, Оба указываются как указатель на int
, Я думаю, что точка зрения Сетхи состоит в том, что в гипотетическом языке, использующем (только) эквивалентность имен, эти два указателя наint
выражения типа создают два разных типа, которые несовместимы — так же, как два идентичных использования new
создавать отличные, неэквивалентные объекты.
В языке эквивалентности имен вы должны дать имя выражению типа, чтобы использовать его более одного раза для совместимости типов. В синтаксисе C ++ это потребует использования typedef
:
typedef int *intp;
intp i1;
intp i2;
Сейчас, i1
а также i2
есть совместимые с именем типы.
Других решений пока нет …