类型检查中的纯名称等价

时间:2013-03-18 23:39:17

标签: c++ compiler-construction programming-languages compatibility typechecking

我正在阅读Ravi Sethi关于编程语言概念的书,并在那里说

int *i1;  
int *i2;
     

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

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

1 个答案:

答案 0 :(得分:2)

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

在名称等价语言中,您必须为类型表达式指定一个名称,以便多次使用类型兼容。在C ++语法中,需要使用typedef

typedef int *intp;
intp i1;
intp i2;

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