我正在MFC中阅读CString的源代码。我对构造函数CString::CString(LPCTSTR lpsz)的实现方式很好奇。

以我的理解,在复制lpsz指示的字符串之前,只需要检查lpsz是否为NULL即可,而无需结合检查HIWORD(lpsz)是否为NULL

是否有任何MFC人员通过这里并愿意给出一些解释?

CString::CString(LPCTSTR lpsz)
{
    Init();
    if (lpsz != NULL && HIWORD(lpsz) == NULL)
    {
        UINT nID = LOWORD((DWORD)lpsz);
        if (!LoadString(nID))
            TRACE1("Warning: implicit LoadString(%u) failed\n", nID);
    }
    else
    {
        int nLen = SafeStrlen(lpsz);
        if (nLen != 0)
        {
            AllocBuffer(nLen);
            memcpy(m_pchData, lpsz, nLen*sizeof(TCHAR));
        }
    }
}

最佳答案

它检查是否从 MAKEINTRESOURCE 传递了实际的指针或整数资源标识符。在后一种情况下,它将从资源中加载字符串。

09-05 06:00