我發現這些oddl線C++ QList在if語句中,什麼是默認值?
QList<TDataXml *> *newXMLData = input->getValue<QList<TDataXml *>>();
if(newXMLData)
{
// do things
}
我不明白if(newXMLData)
一些代碼示例。這是一個QList。何時應該陳述是真是假?爲什麼不使用Qt isEmpty()方法呢?
由於
我發現這些oddl線C++ QList在if語句中,什麼是默認值?
QList<TDataXml *> *newXMLData = input->getValue<QList<TDataXml *>>();
if(newXMLData)
{
// do things
}
我不明白if(newXMLData)
一些代碼示例。這是一個QList。何時應該陳述是真是假?爲什麼不使用Qt isEmpty()方法呢?
由於
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
}
newXMLData
是指針到QList
並且這樣可以初始化爲NULL。通過在布爾上下文中測試指針,可以避免取消引用NULL指針,這將是未定義的行爲。
換句話說,if語句不是用來檢查列表是否爲空,而是在那裏檢查對getValue()
方法的調用是否返回了有效指針。只有當指針不爲NULL時,該語句纔會評估爲真。只有這樣你才能可靠地調用isEmpty()
或指針指向的類的任何其他方法。
如果(newXMLData)指指針newXMLData指向有效的對象或沒有。如果指針指向Nothing(NULL),則不能調用對象的方法。所以你需要測試指針是否有效。
檢查newXMLData
是NULL
或0
。 但是,newXMLData
需要在if語句之前初始化爲0或NULL。