From cppreference.com
Defined in header
Defined in header
inlinenamespace/* unspecified */{inlineconstexpr/* unspecified */cbegin=/* unspecified */;}(since C++20)
(customization point object)Call signature
template<classT>requires/* see below */constexpr/* see below */autocbegin(T&&t);(since C++20)Returns an iterator to the first element of the const-qualified argument.
(until C++23)Returns a constant iterator to the first element of the argument.
(since C++23)
Let CT be
conststd::remove_reference_t<T>& if the argument is an lvalue (i.e. T is an lvalue reference type),
constT otherwise.
A call to ranges::cbegin is
to ranges::begin(static_cast<CT&&>(t)).
(until C++23)If the argument is an lvalue or ranges::enable_borrowed_range<std::remove_cv_t<T>> is true, then a call to ranges::cbegin is
to:
std::const_iterator<decltype(U)>(U) for some expression U equivalent to ranges::begin(
(t).
In all other cases, a call to ranges::cbegin is ill-formed, which can result in
when the call appears in the immediate context of a template instantiation.
(since C++23)The return type models
and
(since C++23) in all cases.
Customization point objects
The name ranges::cbegin denotes a customization point object, which is a const
of a
class type. See
for details.
Notes
For an lvalue range e of type T, ranges::cbegin(e) is equivalent to
ranges::begin(std::as_const(e)).
(until C++23)ranges::begin(e) if T models
.
Otherwise, ranges::begin(std::as_const(e)) if constT models
.
Otherwise, std::basic_const_iterator(ranges::begin(e)).
(since C++23)Example
Run this code
#include<cassert>#include<ranges>#include<vector>intmain(){std::vectorv{3,1,4};autovi=std::ranges::cbegin(v);assert(3==*vi);++vi;// OK, constant-iterator object is mutableassert(1==*vi);// *vi = 13; // Error: constant-iterator points to an immutable elementinta[]{3,1,4};autoai=std::ranges::cbegin(a);// cbegin works with C-arrays as wellassert(3==*aiand*(ai+1)==1);// *ai = 13; // Error: read-only variable is not assignable}See also
(C++20)
returns an iterator to the beginning of a range
(customization point object)
(C++11)(C++14)
returns an iterator to the beginning of a container or array
(function template)