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

Mar*_* A. 12 c++11

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

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

它们不可互换吗?

Pie*_*aud 20

两者之间绝对没有区别.

如果你看看标准:

7.1.3 typedef规范[dcl.typedef]

一个typedef的名称,也可以通过引入的别名声明.的标识符下面的using关键字成为typedef的名称.它具有与typedef说明符引入的语义相同的语义.特别是,它没有定义新类型,它不应出现在type-id中.

7.3.3使用声明[namespace.udecl]

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


但是从这个页面:http://en.cppreference.com/w/cpp/language/type_alias

据说 :

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

这似乎是这样的:

// template type alias
template<class T> using ptr = T*;
// the name 'ptr<T>' is now an alias for pointer to T
ptr<int> x;
Run Code Online (Sandbox Code Playgroud)

只有using指令才有可能.


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