下面是這個函數的文檔,如果列表爲空,QList :: first()會返回什麼?
T & QList::first()
返回列表中的第一個項目的引用。該列表不得爲空 。如果列表可以爲空,請在致電此 函數之前致電
isEmpty()
。
我想弄清楚如果列表爲空,QList::first()
會返回什麼?
下面是這個函數的文檔,如果列表爲空,QList :: first()會返回什麼?
T & QList::first()
返回列表中的第一個項目的引用。該列表不得爲空 。如果列表可以爲空,請在致電此 函數之前致電
isEmpty()
。
我想弄清楚如果列表爲空,QList::first()
會返回什麼?
只是看看相應的qlist.h
標題。的QList::first()
實現很簡單,只要
inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); }
在一個空列表斷言將abort()
程序。
來源(參考:qtproject/qt
)的快速掃描顯示呼叫受到QT_ASSERT(!isEmpty())
(兩種覆蓋,const
和非)的保護。
沒有通過源碼進行疏浚,我猜QT_ASSERT
將調用terminate
或類似如果內置調試,並且可能會在發佈中編譯出來。否則,對QList::first
的調用最終將取消引用代理類型QListData::Data
中的指針,在您的情況下這將是未定義的行爲。
總結:不要做
什麼會
QList::first()
回報,如果列表是空的
它永遠不會回來。認真。
OTOH,我真的很困惑像你這樣的問題。如果你無法嘗試,也許你應該設置你的環境,讓這些實驗變得簡單,然後再深入研究。
您是否嘗試過自己先實施? – vishal
如果文檔沒有提出異常,那麼最安全的就是它是*未定義的行爲*。 – juanchopanza
如果它說不要使用空的列表,那麼不要這樣做。您可能會遇到崩潰甚至更糟 - 內存損壞(或任何其他未定義的行爲)。 – 2015-10-20 14:59:46