C++ 中的 typedef 与 using

35 浏览
0 Comments

C++ 中的 typedef 与 using

我知道在C++11中我们现在可以使用using编写类型别名,就像使用typedef一样:

typedef int MyInt;

从我所了解的来看,这和以下代码等价:

using MyInt = int;

而这种新语法的出现是为了实现\"模板typedef\":

template< class T > using MyType = AnotherType< T, MyAllocatorType >;

但是,对于前两个非模板示例,标准中是否存在其他细微差别?例如,typedef以\"弱\"方式进行别名处理。也就是说,它不会创建新类型,而只会创建新名称(这些名称之间的转换是隐式的)。

using是否相同,还是它生成新类型?是否存在任何差异?

admin 更改状态以发布 2023年5月21日
0
0 Comments

它们基本相同,除了:

别名声明与模板兼容,而C风格的typedef则不兼容。

0
0 Comments

它们等价,来自标准 (重点是我的) (7.1.3.2):

typedef-name 也可以通过别名声明引入。使用关键字后面的标识符成为 typedef-name,并且标识符后面的可选 attribute-specifier-seq 适用于该 typedef-name。其语义与 typedef 指示符引入时类似。 特别地,它不定义新类型,也不应该出现在 type-id 中。

0