gpt4 book ai didi

C++ : ((A*)nullptr)->foo(); is legal?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:13 27 4
gpt4 key购买 nike

在深入研究 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 type X, or of a type derived from X, the behavior is undefined.

据推测,编写此函数的人都知道 Microsoft 的编译器在这种特殊情况下不会做任何疯狂的事情,因为调用 null CWnd * 的“安全”似乎是它的存在(!)。

关于C++ : ((A*)nullptr)->foo(); is legal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26687808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com