类型检查中的纯名称等价
Pure name equivalence in type checking
我正在阅读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;
现在,i1
和i2
具有名称兼容类型
相关文章:
- 键入特征以检查类型是否可从流和 MSVC 读取
- 在编译时检查类型是否为 std::basic_string<T> C++
- 检查类型 T 是否具有成员函数 SFINAE 的任何重载
- 检查类型是否为模板的实例化
- 如何检查类型 'T' 是否具有'T(std::initializer_list<U>)'构造函数
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 检查类型的相等性
- C++编译时检查类型
- 使用模板C++检查类型
- 如何检查类型 T 是否在参数包 Ts 中
- 如何使用条件来检查类型名 T 是否是 C++ 中浮点类型的整数类型
- 检查类型是否在 C++ 中定义了 [][]
- 是否有类型特征检查类型之间的包含
- 如何在运行时检查类型
- 使用SFINAE检查类型是否可以绑定到模板模板参数
- 如何检查类型是否是给定类模板的实例化
- 如何在编译时检查类型
- 检查类型是否可以作为 boost::lexical_cast <string>的参数
- 如何检查类型是通过 typedef 定义的还是在模板参数中使用定义的
- 检查类型是否为地图