为什么要引入using
using和typedef的作用都是为了,定义类型别名。既然有typedef了,为什么还要引入using呢?
答案:为了弥补typedef的不足。using 的别名语法也覆盖了 typedef 的全部功能,C+11标准鼓励用using,因为using比较直观。
using比typedef直观
// 重定义unsigned char
typedef unsigned char ty_uchar;
using ty_uchar = unsigned char;
// 重定义函数指针
typedef void (*ty_func)(int,double);
using ty_func = void (*)(int, double);
从上面的对比中可以发现,C++11 的 using 别名语法比 typedef 更加清晰。using的写法把别名的名字放到了左边,而把别名指向的放在了右边,中间用 = 号等起来,非常清晰。
using可用于模板别名,而typedef不行
template <typename T>
using ty_map_str = std::map<std::string, T>;
ty_map_str m_map;
如果使用typedef,编译报错
template <typename T>
typedef std::map<std::string, T> ty_map_str;
在 C++11之前不得不这样写:
template <typename _T>
struct ty_str_map
{
typedef std::map<std::string, _T> map_type;
};
ty_str_map<int>::map_type m_map;