QList takeLast() and removeLast() conflict
QList takeLast() and removeLast() conflict
当我尝试运行这段代码时:
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()
)。
相关文章:
- SDL_Renderer opengl conflict
- std type_traits conflict with Qt type_traits
- OpenCV 2.4.7 conflict with Qt 4.8.1 QImage
- C++/ASM - "Operand size conflict" , "Improper operand type"
- NDK conflict c/c++
- FreeImage and wxWidgets conflict?
- Conflict std::set and NTL::vec_ZZ
- boost.asio and pfring conflict
- QList takeLast() and removeLast() conflict
- unsigned long long conflict with uint64_t?
- 变量声明冲突导致编译器错误:"conflict with new declaration with '