作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在深入研究 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:
If a non-static member function of a class
X
is called for an object that is not of typeX
, or of a type derived fromX
, the behavior is undefined.
据推测,编写此函数的人都知道 Microsoft 的编译器在这种特殊情况下不会做任何疯狂的事情,因为调用 null CWnd *
的“安全”似乎是它的存在(!)。
关于C++ : ((A*)nullptr)->foo(); is legal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687808/
我是一名优秀的程序员,十分优秀!