std::string data() 方法
- 自 C++20 起
- 自 C++17 起
- 自 C++11 起
- 直到 C++11
// (1) Const version
constexpr const CharT* data() const noexcept;
// (2) Non const version
constexpr CharT* data() noexcept;
// (1) Const version
const CharT* data() const noexcept;
// (1) Const version
const CharT* data() const noexcept;
// (1) Const version only
const CharT* data() const;
- 自 C++11 起
- 直到 C++11
返回指向用作字符存储的底层数组的指针。
该指针使得范围:** [ data(); data() + size() ]** 有效,并且其中的值与字符串中存储的值相对应。
返回的数组以 null 结尾,即 data()
和 c_str()
执行相同的功能。
重要
如果 empty()
返回 true
,则指针指向一个单个的 null 字符。
返回指向用作字符存储的底层数组的指针。
该指针使得范围:** [ data(); data() + size() )** 有效,并且其中的值与字符串中存储的值相对应。
返回的数组不要求以 null 结尾。
注意
如果 empty()
返回 true
,则指针是非空指针,不应解引用。
失效
未定义行为
- (1) 通过 data 的 const 重载修改字符数组会导致 未定义行为.
- (2) 将存储在
data() + size()
处的超出末尾的 null 终止符修改为CharT()
以外的任何值都是 未定义行为.
参数
(无)
返回值
指向底层字符存储的指针。
- 自 C++11 起
- 直到 C++11
对于 [ 0, size() ) 中的每个
i
,data()[i] == operator[](i)
。对于 [ 0, size() ] 中的每个
i
,data() + i == std::addressof(operator[](i))
。复杂度
常数 - O(1)。
备注
c_str()
和 data()
执行相同的功能。 (自 C++11 起)
示例
Main.cpp
#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()));
}