Amu*_*umu 4 c++ pointers typedef
所以,通常我们将typedef设置为另一个类型或函数指针,但是对于指针来说typedef类型对我来说很奇怪.例如,在winnt.h中我们得到:
typedef void *HANDLE;
typedef PVOID HANDLE;
Run Code Online (Sandbox Code Playgroud)
和PVOID是:
typedef void *PVOID,*LPVOID;
Run Code Online (Sandbox Code Playgroud)
据认为,在第一条语句必须是*处理,因为它是作废的指针,而PVOID是已经作废的指针,因此需要不被声明为一个指针.
但是,对指针类型的typedef有什么好处?这不是更令人困惑吗?
typedef指针的类型有什么好处?这不是更令人困惑吗?
通常,模块/库需要保持一些内部状态才能正常运行.需要在为此模块/库调用的每个api上读取/验证此内部状态.因此,模块的用户需要将此信息传递给他们调用的每个api.但是库实现者不希望库的用户能够看到这个维护状态的内容,因为如果他们被允许,有人可能会玩恶作剧或者诚实地修改状态,结果可能是这个模块非常激烈.为了避免这种情况,模块将它们的状态维护变量屏蔽为void*现在它对模块的用户来说是不透明的(它的内容是不可见的).为了让用户不被混淆使用的benifit void *他们通常的typedef的void *是HANDLE,这是为了便于使用的模块/库的客户端.
至于上面提到的代码:
typedef void *PVOID,*LPVOID;
Run Code Online (Sandbox Code Playgroud)
意味着PVOID从此以后你提到它将被视为一种void *类型.
所以,在
typedef PVOID HANDLE;
Run Code Online (Sandbox Code Playgroud)
相当于:
typedef void *HANDLE;
Run Code Online (Sandbox Code Playgroud)
因为PVOID什么都不是void *.
| 归档时间: |
|
| 查看次数: |
5198 次 |
| 最近记录: |