如果列表为空,QList :: first()会返回什么?

时间:2015-10-20 14:52:00

标签: c++ qt stl qlist

以下是此功能的文档,

T & QList::first ()
  

返回对列表中第一项的引用。列表一定不能   是空的。如果列表可以为空,请在调用之前调用isEmpty()   功能

我想弄清楚如果列表为空,QList::first()会返回什么?

3 个答案:

答案 0 :(得分:4)

快速扫描来源(参考:qtproject/qt)表明该呼叫受QT_ASSERT(!isEmpty())保护(对于两个覆盖,const和非)。

如果没有通过源代码进行挖掘,我猜测QT_ASSERT将调用terminate或类似内置调试版,并且可能会在发布时编译出来。否则,对QList::first的调用最终会取消引用代理类型QListData::Data中的指针,这在您的情况下将是未定义的行为。

总结:不要这样做

答案 1 :(得分:0)

只需查看相应的qlist.h标题即可。 QList::first()的实现就像

一样简单
inline T& first() { Q_ASSERT(!isEmpty()); return *begin(); }

在空列表中,断言将abort()您的程序。

答案 2 :(得分:0)

  

如果列表为空,QList::first()会返回什么

它永远不会回来。严重。

OTOH,我对你这样的问题感到很困惑。如果你不能尝试,也许你应该设置自己的环境,以便在深入研究之前轻松完成这些实验。