if语句中的C ++ QList,默认值是什么?

时间:2012-06-26 10:10:55

标签: c++ qt if-statement qlist

我找到了一些带有这些奇数行的代码示例

QList<TDataXml *> *newXMLData = input->getValue<QList<TDataXml *>>();
    if(newXMLData) 
    {
        // do things
    }

我不理解if(newXMLData)。这是一个QList。什么时候声明应该是真还是假?为什么不使用Qt isEmpty()方法呢?

谢谢

4 个答案:

答案 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)

检查newXMLDataNULL还是0。 但是,newXMLData需要在if语句之前初始化为0或NULL。