我应该将CComBSTR与NULL进行比较吗?
Should I Compare CComBSTR to NULL
在下面的代码片段中,
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)
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以防止与null与超载运算符==进行比较
- 在将迭代器与C 中的null进行比较时,编译误差
- 重载后的 C++ 与 NULL 的比较 == 运算符
- 我应该将CComBSTR与NULL进行比较吗?
- 将字符串指针与 NULL 以及 NULL 字符进行比较的目的
- 将字符串的地址与 NULL 进行比较
- std::排序将元素与null进行比较
- C++比较运算符重载中第一个参数为 null 时出现分段错误
- 将对象与应等于 NULL 的 NULL 进行比较时出现分段错误
- 用于比较指针到 NULL 的编码标准
- 比较中NULL和零之间的差异
- “operator==”没有匹配项,正在将对象与NULL进行比较
- std::映射比较函数和NULL
- GCC:为什么一行代码中的错误(字符串和NULL的比较)会导致一长串错误消息
- 可以安全地将预先存在的类型转换NULL的返回与较新的nullptr进行比较吗
- 为什么比较成员函数指针为NULL会产生警告?
- 与c++中的Null比较