2012-06-26 3 views
0

я найти образец кода с этими oddl линиямиC++ QList в выражении if, что такое значение по умолчанию?

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

Я не понимаю if(newXMLData). Это QList. Когда утверждение должно быть истинным или ложным? Почему бы не использовать метод Qt isEmpty()?

Благодаря

ответ

2

if(newXMLData) проверяет недействительности, потому что newXMLData является указателем, и, следовательно, он может указывать не объект, в этом случае это значение nullptr (или NULL в C++ 03).

Если newXMLData является неnullptr, то это будет true и если-блок будет выполнять, в противном случае false и если-блок не будет выполняться.

Это так же, как (C++ 11):

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

newXMLData является указатель к QList и как таковой может быть инициализирован NULL. Проверяя указатель в логическом контексте, вы избегаете разыменования указателя NULL, что будет неопределенным поведением.

Другими словами, оператор if не существует, чтобы проверить, пуст ли он или нет, он должен проверить, вернул ли метод getValue() действительный указатель. Оператор будет оценивать true, только если указатель не равен NULL. Только тогда вы можете надежно вызвать isEmpty() или любой другой метод класса, на который указывает указатель.

0

, если (newXMLData) означает, что указатель newXMLData указывает на действительный объект или нет. вы не можете вызывать методы объекта, если указатель указывает на ничего (NULL). Поэтому вам нужно проверить, что указатель действителен или нет.

0

Проверка newXMLData является NULL или 0. Но, newXMLData должен быть инициализирован 0 или NULL перед выражением if.