我正在阅读Ravi Sethi关于编程语言概念的书,并在那里说
int *i1; int *i2;
在这些声明之后,i1和i2的类型不兼容名称类型。在 使用名称类型兼容性的语言,变量i1和i2不能 彼此比较或分配。
我想知道他们为什么不兼容?它们具有相同的名称类型:int。有人可以解释一下并给出一个有效的纯名称等价的例子吗?感谢
答案 0 :(得分:2)
他们都没有类型int
。两者都被键入为int
的指针。我认为Sethi的观点是,在使用(仅)名称等价的假设语言中,这两个指向int
类型的表达式创建了两种不兼容的不同类型 - 就像new
的两个相同用法一样创建不同的,非等价的对象。
在名称等价语言中,您必须为类型表达式指定一个名称,以便多次使用类型兼容。在C ++语法中,需要使用typedef
:
typedef int *intp;
intp i1;
intp i2;
现在,i1
和i2
具有与名称兼容的类型。