typedef vs using in C++
Declaring new aliases
There are two ways of declaring new type aliases in modern C++:
- typedef
- using
注意:两者都没有 create 新的 type,只是一个原来的 type 的一个 alias.
typedef
The first and traditional one is with the typedef keyword:
1 | typedef [original-type] [your-alias]; |
For example:
1 | typedef int Pixel; |
using
The other one, introduced in C++11, is with the using keyword:
1 | using [your-alias] = [original-type]; |
For example
1 | using Pixel = int; |
using works best with templates
除了上面的用法,using
还可以用于 template
,这是它比 typedef
多出来的一个用处。
typedef vs using
在用于普通的 type 的时候是一致的,没有区别。
在用于 template
的时候,只能用 using
。
可以认为 typedef
是 using
的一个子集,using
是 more preferable 的。
Where to put it
You can put type alias declarations — both performed with typedef
or using
— everywhere you wish: in namespaces
, in classes
and inside blocks
(i.e. between {
and }
).
Note: Alias templates on the other hand follow the same rules of any other templated thing in C++: they cannot appear inside a block. They are actual template declarations, after all!