C++ 类型检查中的纯名称等价

C++ 类型检查中的纯名称等价,c++,compiler-construction,programming-languages,compatibility,typechecking,C++,Compiler Construction,Programming Languages,Compatibility,Typechecking,我正在读Ravi Sethi关于编程语言概念的书,书上说 在这些声明之后,i1和i2的类型与名称类型不兼容。在里面 使用名称类型兼容性的语言,变量i1和i2无法匹配 相互比较或分配的 我想知道为什么它们的名称不兼容?它们有相同的名称类型:int。有人能解释一下,并给出一个有效的纯名称等价的例子吗?谢谢他们都没有int类型。两者都是作为指向int的指针键入的。我认为Sethi的观点是,在使用(仅)名称等价的假设语言中,这两个指向-int类型表达式的指针创建了两个不兼容的不同类型,就像两个相同的使用

我正在读Ravi Sethi关于编程语言概念的书,书上说

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


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

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

在名称等价语言中,必须为类型表达式指定一个名称才能多次兼容地使用它。在C++语法中,这需要使用<代码> TyPulf< <代码>:

typedef int *intp;
intp i1;
intp i2;

< > >代码> I1<代码>和<>代码> I2<代码>有名称兼容类型。

在C++上下文中,我认为这没有任何意义……这是本书的摘录吗?JBentley是的,有一个例子,他的上下文似乎是这样的:
类型构造函数是构建新类型的操作符。例如,在C++中,类型构造函数包括:[]、Stutt、Cype、Cug和*.< /C>和< Cord>名称类型兼容[]…2。没有构造的类型(包含类型构造函数的表达式)与任何其他类型兼容
。也许这会帮助其他人回答你的问题。那么,为什么i1和i2在他的上下文中是不兼容的呢?
typedef int *intp;
intp i1;
intp i2;