C++11新特性之使用using(代替typedef)定义别名
1.介绍
传统的C++使用typedef重定义一个类型存在一些限制,例如无法直接重定义一个模版。如下所示。
template <typename Val>
struct str_map
{
typedef std::map<std::string, Val> type;
};
str_map<int>::type map1;
需要添加额外的类来实现,显的有些繁琐,并且不利于代码的泛用。
因此在C++11中出现了可以重定义模版的语法。如下所示。
template <typename Val>
using str_map_t = std::map<std::string, Val>;
str_map_t<int> map1;
这里使用using定义别名,重定义的别名是str_map_t。与typedef相比,using是不是更加的简洁、好用。
2.使用语法
(1)重定义普通类型
using uint_t = unsigned int;
(2)重定义模版类型
template <typename Val>
using str_map_t = std::map<std::string, Val>;
通过观察可知,using的使用语法为:
using 别名 = 原类型
在普通类型上,typedef与using的效果相同,但定义语法略有区别。
typedef的使用语法为:
typedef 原类型 别名 (类似于声明变量)
3.总结
优点:
(1)using功能更加的全面。如重定义模版等。
(2)using的语法比typedef更加的清晰。
注意事项:
(1)using和typedef只是给类型重定义,不会创造新的类型。
(2)using重定义的模版被称为模版别名。