2

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

int *i1;  
int *i2;

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

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

4

1 回答 1

2

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

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

typedef int *intp;
intp i1;
intp i2;

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

于 2013-03-19T08:05:51.540 回答