1. 重命名结构体名称
typedef struct Person
{
char name[20];
int age;
}MyPerson;
2. 重命名指针
typedef char * PCHAR;
void Test01()
{
char *p1, *p2;
cout << typeid(p1).name() << endl;
cout << typeid(p2).name() << endl;
PCHAR p3, p4;
cout << typeid(p3).name() << endl;
cout << typeid(p4).name() << endl;
}
3. 重命名数据类型,增强跨平台程序的可移植性
typedef long long MyLongLongType;
void Test02()
{
MyLongLongType llAge = 10;
}
4. 定义数组指针
void _cdecl Test01()
{
int arr[] = { 1, 2, 3, 4, 5 };
typedef int(ARRAY_TYPE)[5];
ARRAY_TYPE myArr;
for (int i = 0; i < 5; i++)
{
myArr[i] = i + 10;
}
for (int i = 0; i < 5; i++)
{
printf("%d\n", myArr[i]);
}
ARRAY_TYPE *pArr = &myArr;
pArr = &arr;
for (int i = 0; i < 5; i++)
{
printf("%d\n", *(*pArr + i));
}
typedef int(*ARRAY_POINTER)[5];
ARRAY_POINTER pArray = &arr;
int(*pArrParam)[5] = &arr;
}
5. 为类模板的具体化指定别名
typedef std::array<double, 12> DArr;
DArr arr;
- c++11 新增了一项功能——使用模板提供一系列额别名
template<typename T>
using ArrType = std::array<T,12>;
ArrType<int> nArr;
ArrType<double> dArr;
- c++11也允许将语法using=用于非模板,用于非模板时,这种语法与常规typedef等价:
typedef const char* pc1;
using pc2 = const char*;
typedef const int *(*pal)[10];
using pa2 = const int *(*)[10];