13

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

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

他们不是可以互换的吗?

4

2 回答 2

20

两者之间绝对没有区别。

如果你看一下标准:

7.1.3 typedef 说明符 [dcl.typedef ]

typedef-name也可以由alias -declaration引入。关键字后面的标识符成为usingtypedef -name它具有与由说明符引入的语义相同的语义typedef特别是,它没有定义新类型,并且不应出现在type-id中。

7.3.3 using 声明 [namespace.udecl]

如果using-declaration使用关键字typename并指定依赖名称 (14.6.2),则using-declaration引入的名称将被视为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 的一个特性。一些编译器还不支持它。

于 2013-08-17T09:51:04.733 回答
1

没有区别。

typedef 给出类型的别名。

于 2013-08-17T10:06:32.723 回答