0

これらの奇妙な行を含むコードサンプルを見つけました

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

わかりませんif(newXMLData)。これは QList です。ステートメントが真または偽になるのはいつですか? 代わりに Qt isEmpty() メソッドを使用しないのはなぜですか?

ありがとう

4

4 に答える 4

2

if(newXMLData) はポインターであるため、null 性をチェックしnewXMLDataます。したがって、オブジェクトを指していない可能性があります。その場合、値はnullptr(またはNULLC++03 では) です。

がそうでない場合newXMLDataは、そうであり、ifブロック実行されます。それ以外の場合は、if ブロックは実行されません。 nullptrtruefalse

(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

チェックnewXMLDataNULLまたは0です。ただし、newXMLDataif ステートメントの前に 0 または NULL に初期化する必要があります。

于 2012-06-26T10:19:39.323 に答える