typedef 和 using 都可以用于定义一个新类型。typedef 用于c语言中,被c++继承,目的是为已存在的类型创建一个别名。
typedef 用法
typedef old_type new_type
例如:
typedef int Integer;
typedef std::vector<int> IntVector;
typedef void (*FunctionPointer)(double);
using 则是c++11 新引入的语法, 可以用来替换typedef 定义别名的功能,并有更多的灵活性。
例如
using Integer = int;
using IntVector = std::vector<int>;
using FunctionPointer = void (*)(double);
using
的语法通常被认为更加清晰和直观,尤其是涉及到模板别名时。以下是 using
与 typedef
其中一个主要区别的例子,这涉及到模板别名
template <typename T>
struct MyType {typedef std::vector<T> type;
};
使用时应该写成 MyType<int>::type VecType; (typedef 不支持模板类型的定义);
而using则可以
template <typename T>
using MyType = std::vector<T>;
使用时,MyType<int> VecType1; MyType<std::string> VecType2;
(参考 c++ primer , “模板类型别名“ 部分)
总结:
typedef
和using
都可以用来定义类型别名,但using
语法更清晰直观。using
支持模板别名,这是typedef
无法做到的。- 推荐在C++代码中preferentially使用
using
语法来定义类型别名,特别是涉及模板时。 - 对于需要与旧的 C 代码或早期的 C++ 代码保持兼容的情况,你可能仍然会看到
typedef
的使用。