当我尝试运行此代码时:
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
清空之前保存最后一个?
答案 0 :(得分:3)
在这样的API中,这是一个非常常见的惯例,“take”这个词应该按字面意思理解 - 这个函数真的将带走最后一个元素,即删除它,并返回它。您可以在the documentation中了解相关信息:
删除列表中的最后一项并将其返回。
您可以使用last()
获取最后一个元素而不删除它。这也是Qt普遍的惯例, getters 的命名没有“get”这个词 - 只是他们“得到”的名字。
答案 1 :(得分:3)
QList::takeLast()
删除列表中的最后一个元素,如documentation中的解释。
改为使用QList::last()
(或等同于QList::back()
)。