[英]Simplify dereferencing void pointer
此WINAPI線程回調:
DWORD WINAPI dont_thread_on_me(LPVOID context) {
int value = *((int *)context);
return ERROR_SUCCESS;
}
特別是這行:
int value = *((int *)context);
作品。 但是*((int *)context)
令人討厭。 有沒有更好的方法可以寫呢?
int value = *reinterpret_cast<int *>(context);
如果需要的話,您真的無法繞開事實。
您可以使用reinterpret_cast
:
int value = *reinterpret_cast<int *>(context);
編譯器必須知道如何處理context
。 因此,您必須通過強制類型轉換告訴編譯器它指向一個int
。 您可以使用以下宏將其隱藏
#define read_as_int(p) *(reinterpret_cast<int*>(p))
int value = read_as_int(context);
但這既不會提高可讀性,也不會增加鍵入代碼的工作量。 C ++純粹主義者可能更喜歡內聯函數:
int inline read_as_function(void*p)
{
return *(reinterpret_cast<int*>(p));
}
盡管該問題被標記為C ++,但它也作為C問題完全有效(而且我永遠也無法告訴人們是否正確地標記了問題),所以...
在C中,通常這樣寫:
foo( void *v ) {
int *ip = v;
int x = *ip;
這是優雅還是類型系統中的漏洞是個人喜好的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.