我在这里阅读模板别名:http : //en.cppreference.com/w/cpp/language/type_alias
而且我想知道,即使它写在我链接的页面的第一行,typedef和类型别名(using mytype = T;
)有什么区别?
它们不是可互换的吗?
两者之间绝对没有区别。
如果您看一下标准:
7.1.3 typedef规范[dcl.typedef]
一个typedef的名称,也可以通过引入的别名声明。的标识符下面的
using
关键字成为typedef的名称。它具有与typedef
说明符所引入的语义相同的语义。特别是,它没有定义新的类型,也不应出现在type-id中。7.3.3使用声明[namespace.udecl]
如果using-declaration使用关键字typename并指定了从属名称(14.6.2),则using-declaration引入的名称将被视为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;
仅可与该using
指令一起使用。
并且不要忘记这是C ++ 11的功能。一些编译器尚不支持它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句