std::ranges:: cdata
|
定义于头文件
<ranges>
|
||
|
定义于头文件
<iterator>
|
||
|
inline
namespace
/*unspecified*/
{
inline
constexpr
/*unspecified*/
cdata
=
/*unspecified*/
;
|
(C++20 起)
(定制点对象) |
|
|
调用签名
|
||
|
template
<
class
T
>
requires
/* 见下文 */
|
(C++20 起) | |
返回指向由 const限定 (until C++23) 参数表示的连续范围中 常量类型 (since C++23) 首元素的指针。
|
令
对
返回类型等价于 std:: remove_reference_t < ranges:: range_reference_t < CT >> * 。 |
(C++23 前) |
|
若实参为左值或
ranges::
enable_borrowed_range
<
std::
remove_cv_t
<
T
>>
为
true
,则对
返回类型等价于 std:: remove_reference_t < ranges:: range_const_reference_t < T >> * 。
在所有其他情况下,对
|
(since 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)
|
获取底层数组的指针
(函数模板) |