std::basic_string<CharT,Traits,Allocator>::data
来自cppreference.com
< cpp | string | basic string
(1) | ||
const CharT* data() const; |
(C++11 前) | |
const CharT* data() const noexcept; |
(C++11 起) | |
CharT* data() noexcept; |
(2) | (C++17 起) |
返回指向作为字符存储工作的底层数组的指针。此指针满足范围 [data(); data() + size())
为合法,且其中的值对应存储于字符串的值。
不要求返回的数组是空终止的。 若 empty() 返回 true ,则指针指向不应解引用的非空指针。 |
(C++11 前) |
返回的数组是空终止的,即 若 empty() 返回 true ,则指针指向单个空字符。 |
(C++11 起) |
指向 data()
的指针可能因以下情况非法:
- 传递非 const 引用给任何标准库函数,或
- 在 string 上调用非 const 成员函数,除了
operator[]()
、 at() 、 front() 、 back() 、 begin() 、 end() 、 rbegin() 、 rend() 。
1) 通过
data
的 const 重载修改数组有未定义行为。2) 修改存储于
data() + size()
的尾后空终止符为任何异于 CharT()
的值有未定义行为。参数
(无)
返回值
指向底层字符存储的指针。
对 |
(C++11 前) |
对 |
(C++11 起) |
复杂度
常数。
示例
运行此代码
#include <algorithm> #include <cassert> #include <cstring> #include <string> int main() { std::string const s("Emplary"); assert(s.size() == std::strlen(s.data())); assert(std::equal(s.begin(), s.end(), s.data())); assert(std::equal(s.data(), s.data() + s.size(), s.begin())); assert(0 == *(s.data() + s.size())); }
参阅
(C++11) |
访问首字符 (公开成员函数) |
(C++11) |
访问最后的字符 (公开成员函数) |
返回字符串的不可修改的 C 字符数组版本 (公开成员函数) |