我找到了一些带有这些奇怪行的代码示例
QList<TDataXml *> *newXMLData = input->getValue<QList<TDataXml *>>();
if(newXMLData)
{
// do things
}
我不明白if(newXMLData)
。这是一个 QList。什么时候陈述应该是真的还是假的?为什么不使用 Qt isEmpty() 方法呢?
谢谢
我找到了一些带有这些奇怪行的代码示例
QList<TDataXml *> *newXMLData = input->getValue<QList<TDataXml *>>();
if(newXMLData)
{
// do things
}
我不明白if(newXMLData)
。这是一个 QList。什么时候陈述应该是真的还是假的?为什么不使用 Qt isEmpty() 方法呢?
谢谢
if(newXMLData)
检查空值,因为newXMLData
它是一个指针,因此它可以不指向任何对象,在这种情况下它的值是nullptr
(或NULL
在 C++03 中)。
如果newXMLData
不是,那么 nullptr
它将是true
并且if-block将执行,否则false
并且if-block将不会执行。
与 (C++11) 相同:
if(newXMLData != nullptr) //or if(newXMLData != NULL) in pre C++11
{
//your code
}
newXMLData
是指向的指针,QList
因此可以初始化为 NULL。通过在布尔上下文中测试指针,您可以避免取消引用 NULL 指针,这将是未定义的行为。
所以换句话说,if 语句不是用来检查列表是否为空,而是用来检查对getValue()
方法的调用是否返回了一个有效的指针。仅当指针不为 NULL 时,该语句才会评估为 true。只有这样,您才能可靠地调用isEmpty()
指针指向的类的任何其他方法。
if(newXMLData) 表示指针 newXMLData 是否指向有效对象。如果指针指向空(NULL),则不能调用对象的方法。所以你需要测试指针是否有效。
检查newXMLData
是NULL
或0
。但是,newXMLData
需要在 if 语句之前初始化 0 或 NULL。