首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简化取消引用空指针

简化取消引用空指针
EN

Stack Overflow用户
提问于 2013-09-25 16:30:50
回答 4查看 409关注 0票数 0

这个WINAPI线程回调:

代码语言:javascript
运行
复制
DWORD WINAPI dont_thread_on_me(LPVOID context) {
    int value = *((int *)context);
    return ERROR_SUCCESS;
}

具体而言,这条线:

代码语言:javascript
运行
复制
    int value = *((int *)context);

很管用。但是*((int *)context)是各种各样的下流者。有更好的方式写吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-25 16:32:58

代码语言:javascript
运行
复制
int value = *reinterpret_cast<int *>(context);

如果需要的话,你真的不能回避这样一个事实。

票数 4
EN

Stack Overflow用户

发布于 2013-09-25 16:32:57

您可以使用reinterpret_cast

代码语言:javascript
运行
复制
int value = *reinterpret_cast<int *>(context);
票数 3
EN

Stack Overflow用户

发布于 2013-09-25 16:35:57

编译器必须知道如何对待context。因此,您必须告诉编译器使用强制转换,它指向一个int。您可以使用宏来隐藏它,如

代码语言:javascript
运行
复制
#define read_as_int(p) *(reinterpret_cast<int*>(p))

int value = read_as_int(context);

但是,这并没有提高代码的可读性,也没有提高输入代码的努力。C++纯粹主义者可能更喜欢内联函数:

代码语言:javascript
运行
复制
int inline read_as_function(void*p) 
{ 
    return *(reinterpret_cast<int*>(p));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19010436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档