9

我喜欢一致性。我最近问了使用std::beginvs. eg的问题std::vector<int>::begin,一致的决定似乎是使用前者,因为它更通用。但我想我在泥泞中找到了一根棍子。有时,你想传达你不会在循环遍历容器时更改容器,因此调用std::vector<int>::cbegin. iter = v.cbegin()如果您有时这样做而其他时间这样做,它会使您的代码非常不对称iter = begin(v)std::begin有没有办法解决这种缺乏对称性的问题,鉴于这些知识,你还会推荐吗?为什么C++没有std::cbegin

4

2 回答 2

40

C++14有cbegin//cend等。并且它开始在主要编译器中可用。

于 2013-11-19T15:26:38.310 回答
3

例如,当您的容器被声明为“const”时,它会作为 传递给函数foo(const std::vector<int> & v),然后std::begin实际上会返回一个const_iterator.

于 2013-11-08T23:47:33.097 回答