无论如何要区分一个类型的原始名称和该类型的 typedef-name 吗?
例如:
class C1 {};
typedef C1 C2;
C1 和 C2 现在都命名相同的类型。在上面的代码中,是否存在过不能用 C2 替换名称 C1 引用相关类型的情况(反之亦然)?
typedef 创建一个别名,它们作为类型无法区分。另一方面,有一些特定的语法结构需要真正的类型而不是 typedef-ed(构造函数/析构函数的声明/定义......),但这是一个不同的问题。作为一种类型,它们是无法区分的。
它们在. _typedef
是的。出于 C 兼容性的原因,您可以显式添加class
到 C1: class C1 foo;
,但这class C2 foo;
是非法的。
这样做的原因是 C 对结构和函数有单独的命名空间,所以你也可以有一个 function void C1(int)
。这不会引起歧义,因为每个结构名称都必须以struct
. 但是如果你 typedef'ed struct C1
,那么 typedef 名称就不允许给现有函数起别名。
是的,有这样一种情况。您不能使用 typedef 转发声明类型。例如class C2;
将无效。
除此之外,typedef 创建一个身份类型别名并且应该是完全等价的。