2015-10-20 404 views
0

下面是這個函數的文檔,如果列表爲空,QList :: first()會返回什麼?

T & QList::first() 

返回列表中的第一個項目的引用。該列表不得爲空 。如果列表可以爲空,請在致電此 函數之前致電isEmpty()

我想弄清楚如果列表爲空,QList::first()會返回什麼?

+1

您是否嘗試過自己先實施? – vishal

+1

如果文檔沒有提出異常,那麼最安全的就是它是*未定義的行爲*。 – juanchopanza

+0

如果它說不要使用空的列表,那麼不要這樣做。您可能會遇到崩潰甚至更糟 - 內存損壞(或任何其他未定義的行爲)。 – 2015-10-20 14:59:46

回答

0

只是看看相應的qlist.h標題。的QList::first()實現很簡單,只要

inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); } 

在一個空列表斷言將abort()程序。

3

來源(參考:qtproject/qt)的快速掃描顯示呼叫受到QT_ASSERT(!isEmpty())(兩種覆蓋,const和非)的保護。

沒有通過源碼進行疏浚,我猜QT_ASSERT將調用terminate或類似如果內置調試,並且可能會在發佈中編譯出來。否則,對QList::first的調用最終將取消引用代理類型QListData::Data中的指針,在您的情況下這將是未定義的行爲。

總結:不要做

0

什麼會QList::first()回報,如果列表是空的

它永遠不會回來。認真。

OTOH,我真的很困惑像你這樣的問題。如果你無法嘗試,也許你應該設置你的環境,讓這些實驗變得簡單,然後再深入研究。

相關問題