typedef和C ++ 11类型别名之间的区别

时间:2013-08-17 09:17:39

标签: c++11

我在这里阅读模板别名:http://en.cppreference.com/w/cpp/language/type_alias

我想知道,即使它写在我链接的页面的第一行,typedef和类型别名(using mytype = T;

之间的区别是什么

它们不可互换吗?

2 个答案:

答案 0 :(得分:19)

两者之间完全没有区别。

如果你看看标准:

  

7.1.3 typedef指定器[dcl.typedef]

     

typedef-name 也可以由 alias-declaration 引入。 using关键字后面的标识符变为 typedef-name 它具有与typedef说明符引入的语义相同的语义。特别是,它没有定义新类型,它不会出现在 type-id < / em>的

     

7.3.3使用声明[namespace.udecl]

     

如果 using-declaration 使用关键字 typename 并指定从属名称(14.6.2),则使用声明引入的名称被视为 typedef-name


但是,请从此页面开始:http://en.cppreference.com/w/cpp/language/type_alias

据说:

  

类型别名类似于typedefs但是,具有使用模板的优势。

似乎这样:

// template type alias
template<class T> using ptr = T*;
// the name 'ptr<T>' is now an alias for pointer to T
ptr<int> x;

只能使用using指令。


不要忘记这是一个C ++ 11功能。有些编译器还不支持它。

答案 1 :(得分:2)

没有区别。

typedef为该类型提供别名。