QList takeLast()和removeLast()冲突

时间:2014-07-21 10:07:40

标签: c++ qt

当我尝试运行此代码时:

QStringList foo;
foo << "bar";
QString last;
last = foo.takeLast();
qDebug() << last;
foo.removeLast();

IDE引发了此错误:

  

ASSERT:“!isEmpty()”在文件...... \ Qt \ Qt5.3.0 \ 5.3 \ mingw482_32 \ include / QtCore / qlist.h,第299行

如果我通过切换注释来禁用removeLast()命令行,则代码可以正常工作。 我不理解这种行为,因为当takeLast()还不是空列表时foo运行,removeLast()连续被调用。 是个bug吗?有没有办法在QStringList清空之前保存最后一个?

2 个答案:

答案 0 :(得分:3)

在这样的API中,这是一个非常常见的惯例,“take”这个词应该按字面意思理解 - 这个函数真的带走最后一个元素,即删除它,并返回它。您可以在the documentation中了解相关信息:

  

删除列表中的最后一项并将其返回。

您可以使用last()获取最后一个元素而不删除它。这也是Qt普遍的惯例, getters 的命名没有“get”这个词 - 只是他们“得到”的名字。

答案 1 :(得分:3)

QList::takeLast()删除列表中的最后一个元素,如documentation中的解释。

改为使用QList::last()(或等同于QList::back())。