为什么std :: cbegin返回与std :: begin相同的类型

qdi*_*dii 7 c++ iterator c++14

cppreference显示以下签名std::cbegin:

template< class C >
constexpr auto cbegin( const C& c ) -> decltype(std::begin(c));
Run Code Online (Sandbox Code Playgroud)

不应该返回类似的东西C::const_iterator吗?

jua*_*nza 12

c是一个const引用,所以std::begin(c)它将返回任何返回的const重载C::begin().对于标准库类型,这是一个const_iterator.对于数组类型,它是指向的const.

请注意,这依赖于其他非标准库用户定义C,通过const重载实现C::begin(),并返回一个迭代器,使您const可以访问容器的元素.