为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节?

Car*_*ary 2 c++ mfc visual-c++-6

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

在我的理解,通过复制指定的字符串之前lpsz,只需要检查是否lpszNULL更没有必要与检查,如果结合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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

sha*_*oth 6

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