Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::ranges::cbegin(3)	      C++ Standard Libary	std::ranges::cbegin(3)

NAME
       std::ranges::cbegin - std::ranges::cbegin

Synopsis
	  Defined in header <ranges>
	  inline namespace /*unspecified*/ {

	  inline   constexpr  /*unspecified*/  cbegin  =		(since
       C++20)
	  /*unspecified*/;					   (customiza-
       tion point object)

	  }
	  Call signature
	  template< class T >

	  requires   /*	 see  below  */					(since
       C++20)

	  constexpr std::input_or_output_iterator auto cbegin(
	  T&& t	);

	  Returns an iterator to the first element of the const-qualified  ar-
       gument.

	  range-begin-end.svg

	  Let CT be

	   1.  const  std::remove_reference_t<T>&  if the argument is a	lvalue
       (i.e. T is an
	      lvalue reference type),
	   2. const T otherwise,

	  a call to ranges::cbegin is expression-equivalent to
	  ranges::begin(static_cast<CT&&>(t)).

	  The return type models std::input_or_output_iterator in both cases.

	 Expression-equivalent

	  Expression e is expression-equivalent	to expression f, if

	    * e	and f have the same effects, and
	    * either both are constant subexpressions or  else	neither	 is  a
       constant
	      subexpression, and
	    *  either  both are	potentially-throwing or	else neither is	poten-
       tially-throwing
	      (i.e. noexcept(e)	== noexcept(f)).

	 Customization point objects

	  The name ranges::cbegin denotes a customization point	object,	 which
       is a const
	  function  object of a	literal	semiregular class type.	For exposition
       purposes, the
	  cv-unqualified version of its	type is	denoted	as __cbegin_fn.

	  All instances	of __cbegin_fn are equal. The effects of invoking dif-
       ferent instances
	  of type __cbegin_fn on the same arguments are	equivalent, regardless
       of whether the
	  expression denoting the instance is an  lvalue  or  rvalue,  and  is
       const-qualified or
	  not  (however,  a  volatile-qualified	instance is not	required to be
       invocable). Thus,
	  ranges::cbegin can be	copied freely and its copies can be  used  in-
       terchangeably.

	  Given	 a  set	 of types Args..., if std::declval<Args>()... meet the
       requirements for
	  arguments to ranges::cbegin above, __cbegin_fn models

	    * std::invocable<__cbegin_fn, Args...>,
	    * std::invocable<const __cbegin_fn,	Args...>,
	    * std::invocable<__cbegin_fn&, Args...>, and
	    * std::invocable<const __cbegin_fn&, Args...>.

	  Otherwise, no	function call operator of __cbegin_fn participates  in
       overload
	  resolution.

Example
       // Run this code

	#include <iostream>
	#include <ranges>
	#include <vector>

	int main()
	{
	    std::vector<int> v = { 3, 1, 4 };
	    auto vi = std::ranges::cbegin(v);
	    std::cout << *vi <<	'\n';
	    // *vi = 42; // Error: read-only variable is not assignable

	    int	a[] = {	-5, 10,	15 };
	    auto ai = std::ranges::cbegin(a);
	    std::cout << *ai <<	'\n';
	    // *ai = 42; // Error: read-only variable is not assignable
	}

Output:
	3
	-5

See also
	  ranges::begin	returns	an iterator to the beginning of	a range
	  (C++20)	(customization point object)
	  begin
	  cbegin	returns	an iterator to the beginning of	a container or
       array
	  (C++11)	(function template)
	  (C++14)

http://cppreference.com		  2022.07.31		std::ranges::cbegin(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::ranges::cbegin&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help