std::basic_string<CharT,Traits,Allocator>::data
来自 cppreference.com
< cpp | string | basic string
const CharT* data() const; |
(1) | (noexcept 自 C++11 起) (constexpr 自 C++20 起) |
CharT* data() noexcept; |
(2) | (自 C++17 起) (constexpr 自 C++20 起) |
返回一个指向作为字符存储的底层数组的指针。该指针使得范围
|
(直到 C++11) |
|
(自 C++11 起) |
有效,并且其中的值对应于存储在字符串中的值。
返回的数组不需要以 null 结尾。 如果 empty() 返回 true,则该指针为非空指针,不应取消引用。 |
(直到 C++11) |
返回的数组以 null 结尾,即, 如果 empty() 返回 true,则该指针指向单个空字符。 |
(自 C++11 起) |
从 data()
获取的指针可能会因以下情况而失效
- 将非 const 引用传递给字符串到任何标准库函数,或者
- 调用字符串上的非 const 成员函数,但不包括
operator[]()
、at()、front()、back()、begin()、end()、rbegin()、rend()。
1) 修改通过
data
的 const 重载访问的字符数组会导致未定义的行为。内容 |
[编辑] 参数
(无)
[编辑] 返回值
指向底层字符存储的指针。
data()[i] == operator[](i) 对于 |
(直到 C++11) |
data() + i == std::addressof(operator[](i)) 对于 |
(自 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())); }
[编辑] 另请参阅
(DR*) |
访问第一个字符 (公共成员函数) |
(DR*) |
访问最后一个字符 (公共成员函数) |
返回字符串的不可修改的标准 C 字符数组版本 (公共成员函数) | |
返回指向视图的第一个字符的指针 ( std::basic_string_view<CharT,Traits> 的公共成员函数) |