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
класса. Для подробностей см.
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)
|
получает указатель на базовый массив
(шаблон функции) |