std::ranges::cbegin - cppreference.com

From cppreference.com

Defined in header

<ranges>

Defined in header

<iterator>

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

expression-equivalent

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

expression-equivalent

to:

std::const_iterator<decltype(U)>(U) for some expression U equivalent to ranges::begin(

possibly-const-range

(t).

In all other cases, a call to ranges::cbegin is ill-formed, which can result in

substitution failure

when the call appears in the immediate context of a template instantiation.

(since C++23)The return type models

std::input_or_output_iterator

and

constant-iterator

(since C++23) in all cases.

Customization point objects

The name ranges::cbegin denotes a customization point object, which is a const

function object

of a

literal

semiregular

class type. See

CustomizationPointObject

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

constant_range

.

Otherwise, ranges::begin(std::as_const(e)) if constT models

constant_range

.

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)

[edit]

(C++11)(C++14)

returns an iterator to the beginning of a container or array
(function template)

[edit]