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) |
|
若参数为左值或
返回类型等价于 在所有其它情况下,对 |
(从 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'; // 错误:src.data() 被视为只读 std::ranges::data(src)[0] = 'H'; // 正确:src.data() 是非常量存储 char dst[20]; // C风格字符串的存储空间 std::strcpy(dst, std::ranges::cdata(src)); // 保证 [data(src), data(src) + size(src)] 是 NTBS(空终止字节字符串) std::cout << dst; }
输出:
Hello world!
参见
(C++20) |
获取指向连续范围起始的指针 (定制点对象) |
(C++17) |
获取指向底层数组的指针 (函数模板) |