我在这里阅读模板别名:http://en.cppreference.com/w/cpp/language/type_alias
我想知道,即使它写在我链接的页面的第一行,typedef和类型别名(using mytype = T;
)
它们不可互换吗?
答案 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为该类型提供别名。