std::ranges::cdata
Определено в заголовке <ranges> | ||
|---|---|---|
Определено в заголовке <iterator> | ||
inline namespace /*unspecified*/ {
inline constexpr /*unspecified*/ cdata = /*unspecified*/;
}
| (начиная с C++20) (объект-точка настройки) | |
| Сигнатура вызова | ||
template< class T >
requires /* see below */
constexpr /* see below */ cdata( T&& t );
| (начиная с C++20) |
Возвращает указатель на первый элемент константного типа(начиная с C++23) непрерывного диапазона, задаваемого аргументом с квалификатором const(до C++23).
| Пусть
Вызов Возвращаемый тип эквивалентен | (до C++23) |
| Если аргумент является lvalue или
Возвращаемый тип эквивалентен Во всех остальных случаях вызов | (начиная с C++23) |
Если ranges::cdata(t) допустимо, то оно возвращает указатель на объект константного типа(начиная с C++23).
Объекты-точки настройки
Имя ranges::cdata обозначает объект-точку настройки — константный функциональный объект типа класса литерального semiregular. Подробнее см. Объект-точка настройки.
Пример
#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) | получает указатель на базовый массив (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/cdata