Qt 5.0在不同的容器类(如QList或QMap)中引入了迭代器方法cbegin()
和cend()
。
但在这些类中也有constBegin()
和constEnd()
方法。
所有这些方法都是const
,并返回一个stl风格的const_iterator
。
-
cbegin()
/cend()
是否具有与constBegin()
/constEnd()
相同的功能?对我来说似乎是这样,但是在QList, QMap或容器类的文档中没有说明。 - 是否有一个场景,一个人应该使用
cbegin()
/cend()
而不是constBegin()
/constEnd()
,反之亦然?
cbegin()
和cend()
是为了与标准库容器兼容而引入的,自c++ 11以来,标准库容器都包含了这些函数。
Qt只是想保持它的接口类似于标准库。constBegin()
等只是旧版本(Qt在c++ 11发布之前添加了它们)。使用它们没有区别。
我会使用constBegin()
和constEnd()
,因为它们更明确和"Qt风格",但这只是我的个人偏好。cbegin()
/cend()
可能被一些为标准容器实现的算法所使用(因此它们在Qt中存在-它们有助于重用一些代码)。如果您希望在某些时候在Qt之外重用您的代码,请使用它们。
Qt通常提供不同的使用方式,因此程序员可以使用他们习惯使用的风格。
迭代器的类型也是类似的情况。您可以使用标准库或Java样式迭代器中使用的标准样式。这是为了方便用户。
cbegin和constBegin的原因是相似的。同样,如果文档没有说明差异,则没有差异。
正如你所注意到的。constBegin是纯QtStyle, cbegin是STL风格