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