2012-06-26 5 views
0

je trouve un certain exemple de code avec ces lignes oddlC++ QListe dans if, quelle est la valeur par défaut?

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

Je ne comprends pas if(newXMLData). C'est un QList. Quand la déclaration devrait-elle être vraie ou fausse? Pourquoi ne pas utiliser la méthode Qt isEmpty() à la place?

Merci

Répondre

2

if(newXMLData) contrôles de nullité, parce que newXMLData est un pointeur, et il pourrait donc pointer vers aucun objet, auquel cas sa valeur est nullptr (ou NULL en C++ 03).

Si newXMLData est pasnullptr, alors il sera true et le bloc si exécutera, sinon false et si bloc ne sera pas exécuté.

Il est identique à (C++ 11):

if(newXMLData != nullptr) //or if(newXMLData != NULL) in pre C++11 
{ 
    //your code 
} 
0

newXMLData est pointeur-QList et en tant que tel pourrait être initialisé à NULL. En testant le pointeur dans un contexte booléen, vous évitez de déréférencer un pointeur NULL, ce qui serait un comportement indéfini. En d'autres termes, l'instruction if n'est pas là pour vérifier si la liste est vide ou non, elle est là pour vérifier si l'appel à la méthode getValue() a renvoyé un pointeur valide. L'instruction évaluera à true uniquement si le pointeur n'est pas NULL. Seulement alors, vous pouvez appeler de manière fiable isEmpty() ou toute autre méthode de la classe vers laquelle pointe le pointeur.

0

if (newXMLData) désigne le pointeur de points newXMLData à un objet valide ou non. vous ne pouvez pas appeler les méthodes d'un objet si le pointeur pointe vers rien (NULL). Donc, vous devez tester le pointeur est valide ou non.

0

La vérification newXMLData est NULL ou 0. Mais, newXMLData doit être initialisé 0 ou NULL avant l'instruction if.

Questions connexes