C++ cbegin()/cend()与constBegin()/constEnd()的比较

C++ cbegin()/cend()与constBegin()/constEnd()的比较,c++,qt,iterator,qt5,C++,Qt,Iterator,Qt5,Qt5.0在不同的容器类(如或)中引入了迭代器方法cbegin()和cend() 但是在这些类中也有constBegin()和constEnd()方法 所有这些方法都是const,并返回STL样式的const\u迭代器 cbegin()?对我来说,似乎是这样,但在的文件中没有任何规定,或 是否存在这样一种情况,即应该使用cbegin()/cend()而不是constBegin()/constEnd() cbegin()和cend(),其中引入了与标准库容器的兼容性,这些容器自C++11以来都包

Qt5.0在不同的容器类(如或)中引入了迭代器方法
cbegin()
cend()

但是在这些类中也有
constBegin()
constEnd()
方法

所有这些方法都是
const
,并返回STL样式的
const\u迭代器

  • cbegin()?对我来说,似乎是这样,但在的文件中没有任何规定,或
  • 是否存在这样一种情况,即应该使用
    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样式。

使用cbegin等人的方法,可以更容易地在将来用标准容器类型替换Qt类型。在我看来,Qt似乎也改变了它对如何做事的想法。过去有一种只使用Qt功能的思维方式,而现在他们说:在最好的地方使用标准功能,在最好的地方使用Qt功能。检查来源,Luke,等等(TL;DR:它们是一样的)@peppe很好。但是,当文件中没有说明它们是相同的时,谁能保证它们将来会保持相同?行为改变会破坏太多代码,以至于不可能发生。