在深入研究 MFC 时,我发现了这段代码:
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const
{ return this == NULL ? NULL : m_hWnd; }
好像是这样使用的。
CWnd *pWnd = nullptr;
pWnd->GetSafeHwnd(); // NULL
pWnd = /* something */;
pWnd->GetSafeHwnd(); // window handle
在这一点上,我很困惑 - 我们现在调用一个成员函数NULL目的!怎么可能是合法的C++呢?
就语言而言,这是最简单的未定义行为。 §9.3.1 [class.mfct.non-static]/p2:
如果类的非静态成员函数X
被一个对象调用
这不是类型X
,或派生自的类型X
, 行为
未定义。
想必,无论谁编写了这个函数,都知道微软的编译器在这种特殊情况下不会做任何疯狂的事情,因为调用 null 是“安全的”CWnd *
似乎是它存在的全部意义(!)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)