平时,我们经常会是用到typtdef 来方便我们的编程,比如说一个类型名特别长,我为了书写方便和便于代码的阅读,可以使用typedef来实现别名功能,如
typedef int size; size a = 5; //相当于int a = 5
复杂名字的简化
struct Hello_hi_bye //假设有这么2b的名字,这么复杂 { int b; float c; }//可以简化 typedef hello_hi_bye ty; //如此以来就可以减轻写代码的负担 hello_hi_bye a; hello_hi_bye b; hello_hi_bye c; //可以改写为 ty a; ty b; ty c; //恩轻松多了!
写过mfc的人,或者写过win32程序的人一定有这种体验,就是很多的数据类型都是LPXXX,如 LPSTR,LPWSTR,LP就是指针的意思
我们也可以这样做
typedef char* LPCHAR
最后,也是我今天要写这篇博文的目的;
在一个struct 或者 class 里边使用的话,可以达到一种比较奇妙的效果,叫~~~保存一种类型,有点抽象,不怕,我们立即看例子
#include<iostream> struct Test { typedef int Aa; //Aa float a; int b; }; int main() { Test::Aa aa = 5; //其实 aa就是int 的类型 std::cout<<aa<<std::endl; //输出5 return 0; }
咋一看,貌似多此一举,我直接int a = 5;不久行了吗,不急不急,我把它改一下
struct Test { typedef ClassA Aa; //Aa ClassA a; int b; };
这样子的话,就可以实现一个非常令人激动的功能:通过变量名字找到它的类型名
假设说:我知道有个变量 Test x,我想要拿到x.a ,但是我不知道x.a它是什么类型的,我写代码的时候需要定义一个和x.a一样类型的变量y =来接受这个下x.a, 可能 我们要做一些操作 ,这个时候,你!该怎么办??c语言有sizeof,可是没有typeof ,如果这个x的类,的定义里边有
typedef int Aa; 那么我就可以 这样写
Test::Aa y = x.a;
这样的话这个问题就解决了
PS: struct里边写typedef int Aa 这种代码并不会使得 对象的空间增大 sizeof(Test) 可知 大小还是8
其实这个用法主要使用在STL里边,用于迭代器的设计,通过迭代器识别出迭代器所指向的容器的类型