在这个链接中:
http://blogs.msdn.com/b/oldnewthing/archive/2011/04/06/10150261.aspx
最近有人向我指出以下行:
Widget *pwidOld = reinterpret_cast<Widget*>
(InterlockedCompareExchangePointerRelease(
&reinterpret_cast<PVOID&>(g_pwidCached),
pwid, NULL));
有一个良性问题和一个严重问题。
良性的是可以对返回类型进行 static_cast。
严重的似乎是:
&reinterpret_cast<PVOID&>(g_pwidCached)
有人告诉我,通过严格的别名,当您将 &(void*&)g_pwidCached 传递给函数时,编译器可以假设 g_pwidCached 的值没有变化,因为该变化将通过指针类型发生不是对象的类型,也不是 char*(因为 g_pwidCached 不是 void*,它是 Widget*)。3.10/10 似乎是相关的。
这只是特定编译器实现的一个函数,它只是 Visual C++ 保证该行将正常工作吗?