在C++11中,'typedef'和'using'有什么区别?

40 浏览
0 Comments

在C++11中,'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名称也可以通过别名声明引入。使用关键字之后的标识符成为typedef名称,标识符之后的可选属性说明符序列与typedef名称相关联。 它的语义与通过typedef说明符引入的一样。特别地,它不定义新类型,也不应出现在类型标识符中。

0