cbegin()/cend() 与 constBegin()/constEnd()

cbegin()/cend() vs constBegin()/constEnd()

Qt 5.0 在不同的容器 类 中引入了迭代器方法 cbegin()cend(),例如 QList or QMap.

但是类里面还有constBegin()constEnd()方法。

所有这些方法都是 const 和 return STL 风格 const_iterator

cbegin()cend() 是为了与标准库容器兼容而引入的,标准库容器自 C++11 起都包含此类函数。
Qt 只是想让它的接口与标准库相似。 constBegin() 等只是旧版本(Qt 在 C++11 发布之前添加了它们)。使用它们没有区别。

我会使用 constBegin()constEnd(),因为它们更明确并且 'Qt style',但这只是我个人的偏好。 cbegin()/cend() 可能被一些为标准容器实现的算法使用(因此它们存在于 Qt 中——它们有助于重用一些代码)。如果您希望在某个时候在 Qt 之外重用您的代码,请使用它们。

Qt一般经常会提供不同的使用方式,让程序员可以使用他们习惯使用的风格。

类似的情况是迭代器的类型。您可以使用标准库中使用的标准样式或 Java 样式迭代器。这是为了方便用户。

cbegin和constBegin的道理是一样的。此外,如果文档没有说明差异,则没有差异。

如您所见。 constBegin 是纯 QtStyle,cbegin 是 STL 风格。