类型检查中的纯名称等价

Pure name equivalence in type checking

本文关键字:检查 类型      更新时间:2023-10-16

我正在阅读Ravi Sethi关于编程语言概念的书,上面写着

int *i1;  
int *i2;

在这些声明之后,i1和i2的类型不兼容名称类型。在使用名称类型兼容性的语言,变量i1和i2不能相互比较或分配。

我想知道为什么他们的名字不兼容?它们具有相同的名称类型:int。有人能解释一下并给出一个有效的纯名称等价的例子吗?由于

它们都没有int类型。两者都是指向int的指针。我认为Sethi的观点是,在使用(仅)名称等价的假设语言中,这两个指向int的指针类型表达式创建了两种不兼容的不同类型——就像new的两个相同使用创建了不同的、不等价的对象一样。

在名称等价语言中,必须为类型表达式指定一个名称才能以类型兼容的方式多次使用它。在c++语法中,这需要使用typedef:

typedef int *intp;
intp i1;
intp i2;

现在,i1i2具有名称兼容类型