我应该将CComBSTR与NULL进行比较吗?

Should I Compare CComBSTR to NULL

本文关键字:比较 NULL CComBSTR 我应该      更新时间:2023-10-16

在下面的代码片段中,

CComBSTR bstrVal;
HRESULT hr = GetVal(bstrForest);
if (bstrVal!= NULL || bstrVal.Length() > 0)
{
    …
}

检查bstrVal!= NULL是否是有效的检查,因为bstrVal是类的对象?我可以在Visual Studio中看到,如果不初始化bstrVal的值,它就会变得NULL

请解释一下。

请注意,CComBSTR有一个重载的operator!=函数,该函数采用整数。在C++ NULL中是一个宏,它扩展到整数值0

这意味着您并没有真正将bstrVal对象NULL进行比较(它永远不会(,而是将operator!=称为重载,传递明确允许的零。

这意味着比较很好。

在您的

示例中,将CComBSTR与 NULL 进行比较是合法的,因为CComBSTR会覆盖operator!=以支持 NULL 作为输入值(但有更好的选项可用于检查CComBSTR是否具有非 NULL BSTR(。

但是,如果您只对长度为> 0 的BSTR感兴趣,则检查 NULL 是多余的:

CComBSTR bstrVal;
HRESULT hr = GetVal(&bstrVal);
if (bstrVal.Length() > 0)
{
    …
}

CComBSTR::Length()SysStringLen() 的包装器,对于 NULL BSTR返回 0

在您的示例中,如果分配了BSTR,则输入您的if,即使其中有 0 个字符。您可能打算使用 && 而不是 ||

if (bstrVal != NULL && bstrVal.Length() > 0)