std::ranges:: cdata
|
Определено в заголовочном файле
<ranges>
|
||
|
Определено в заголовочном файле
<iterator>
|
||
|
inline
namespace
/*unspecified*/
{
inline
constexpr
/*unspecified*/
cdata
=
/*unspecified*/
;
|
(начиная с C++20)
(объект точки кастомизации) |
|
|
Сигнатура вызова
|
||
|
template
<
class
T
>
requires
/* see below */
|
(начиная с C++20) | |
Возвращает указатель на первый элемент константного типа (начиная с C++23) непрерывного диапазона, заданного константно-квалифицированным (до C++23) аргументом.
|
Пусть
Вызов
Возвращаемый тип эквивалентен std:: remove_reference_t < ranges:: range_reference_t < CT >> * . |
(до C++23) |
|
Если аргумент является lvalue или
ranges::
enable_borrowed_range
<
std::
remove_cv_t
<
T
>>
равно
true
, тогда вызов
Тип возвращаемого значения эквивалентен std:: remove_reference_t < ranges:: range_const_reference_t < T >> * .
Во всех остальных случаях вызов
|
(начиная с C++23) |
Если ranges :: cdata ( t ) валидно, то возвращается указатель на объект константного типа (начиная с C++23) .
Объекты точек кастомизации
Имя
ranges::cdata
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
типа
литерального
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Пример
#include <cstring> #include <iostream> #include <ranges> #include <string> int main() { std::string src {"hello world!\n"}; // std::ranges::cdata(src)[0] = 'H'; // error, src.data() is treated as read-only std::ranges::data(src)[0] = 'H'; // OK, src.data() is a non-const storage char dst[20]; // storage for a C-style string std::strcpy(dst, std::ranges::cdata(src)); // [data(src), data(src) + size(src)] is guaranteed to be an NTBS std::cout << dst; }
Вывод:
Hello world!
Смотрите также
|
(C++20)
|
получает указатель на начало непрерывного диапазона
(объект точки кастомизации) |
|
(C++17)
|
получает указатель на базовый массив
(шаблон функции) |