QList takeLast() and removeLast() conflict

QList takeLast() and removeLast() conflict

本文关键字:conflict removeLast and QList takeLast      更新时间:2023-10-16

当我尝试运行这段代码时:

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

IDE抛出这个错误:

ASSERT: " !isEmpty() " in file ......QtQt5.3.05.3mingw482_32include/QtCore/qlist.h, line 299

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

这是这类api中非常常见的约定,单词"take"应该按字面意思理解——这个函数实际上是取走最后一个元素,即删除它,并返回它。您可以在文档中阅读它:

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

您可以使用last()获取最后一个元素而不删除它。这也是Qt的普遍惯例,getter 的命名没有单词"get"-只是它们"获取"的东西的名称。

QList::takeLast()从列表中删除最后一个元素,如文档中所述。

使用QList::last()(或者等价,QList::back())。