0

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

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

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

谢谢

4

4 回答 4

2

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
}
于 2012-06-26T10:16:25.210 回答
0

newXMLData是指向的指针QList因此可以初始化为 NULL。通过在布尔上下文中测试指针,您可以避免取消引用 NULL 指针,这将是未定义的行为。

所以换句话说,if 语句不是用来检查列表是否为空,而是用来检查对getValue()方法的调用是否返回了一个有效的指针。仅当指针不为 NULL 时,该语句才会评估为 true。只有这样,您才能可靠地调用isEmpty()指针指向的类的任何其他方法。

于 2012-06-26T10:15:54.077 回答
0

if(newXMLData) 表示指针 newXMLData 是否指向有效对象。如果指针指向空(NULL),则不能调用对象的方法。所以你需要测试指针是否有效。

于 2012-06-26T10:16:33.090 回答
0

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

于 2012-06-26T10:19:39.323 回答