Эквивалентность чистого имени в проверке типов

Я читаю книгу Рави Сетхи о концепциях языка программирования, и там написано

int *i1;
int *i2;

После этих объявлений типы i1 и i2 не совместимы с именами. В
язык, который использует совместимость типов имен, переменные i1 и i2 не могут быть
сравнивать или назначать друг другу.

Интересно, почему они не совместимы по названию? Они имеют одинаковый тип имени: int. Может кто-нибудь объяснить это и привести пример правильной эквивалентности чистого имени? Спасибо

2

Решение

Ни один из них не имеет типа int, Оба указываются как указатель на int, Я думаю, что точка зрения Сетхи состоит в том, что в гипотетическом языке, использующем (только) эквивалентность имен, эти два указателя наint выражения типа создают два разных типа, которые несовместимы — так же, как два идентичных использования new создавать отличные, неэквивалентные объекты.

В языке эквивалентности имен вы должны дать имя выражению типа, чтобы использовать его более одного раза для совместимости типов. В синтаксисе C ++ это потребует использования typedef:

typedef int *intp;
intp i1;
intp i2;

Сейчас, i1 а также i2 есть совместимые с именем типы.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]