Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>::data

从 zh.cppreference.net
 
 
 
std::basic_string
 
const CharT* data() const;
(1) (C++11 起为 noexcept)
(C++20 起为 constexpr)
CharT* data() noexcept;
(2) (C++17 起)
(C++20 起为 constexpr)

返回指向用作字符存储的底层数组的指针。该指针使得范围

[data(), data() + size())

(C++11 前)

[data(), data() + size()]

(C++11 起)

有效,且其中的值对应于字符串中存储的值。

返回的数组不要求以空字符终止。

如果 empty() 返回 true,则该指针是一个不应被解引用的非空指针。

(C++11 前)

返回的数组以空字符终止,即 data() 和 c_str() 执行相同的功能。

如果 empty() 返回 true,则该指针指向一个空字符。

(C++11 起)

从 data() 获得的指针可能因以下情况失效:

  • 向任何标准库函数传递字符串的非 const 引用,或
  • 在字符串上调用非 const 成员函数,但 operator[]()、at()、front()、back()、begin()、end()、rbegin()、rend() 除外。
1) 通过 data 的 const 重载访问字符数组并进行修改会导致未定义行为。
2) 将存储在 data() + size() 处的结尾空终止符修改为除 CharT() 以外的任何值会导致未定义行为。

参数

(无)

返回值

指向底层字符存储的指针。

data ( ) [ i ] == operator [ ] ( i ) 对于所有在 [ ​ 0 ​ , size ( ) ) 范围内的 i 成立。

(C++11 前)

data ( ) + i == std:: addressof ( operator [ ] ( i ) ) 对于所有在 [ ​ 0 ​ , size ( ) ] 范围内的 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> 的公开成员函数)