Spec-Zone.ru › C++

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

const CharT* data() const;
(1) (noexcept с C++11)
(constexpr с C++20)
CharT* data() noexcept;
(2) (с C++17)
(constexpr с C++20)

Возвращает указатель на первый элемент базового массива, используемого для хранения символов. Указатель таков, что диапазон

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

(до C++11)

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

(начиная с C++11)

является допустимым, а значения в нём соответствуют значениям, хранящимся в строке.

Возвращаемый массив не обязательно завершается нулевым символом.

Если empty() возвращает true, указатель является ненулевым указателем, который не следует разыменовывать.

(до C++11)

Возвращаемый массив завершается нулевым символом, то есть data() и c_str() выполняют одну и ту же функцию.

Если empty() возвращает true, указатель указывает на один нулевой символ.

(начиная с C++11)

Указатель, полученный из data(), может стать недействительным в следующих случаях:

  • Передача неконстантной ссылки на строку любой функции стандартной библиотеки или
  • Вызов неконстантных функций-членов строки, за исключением operator[](), at(), front(), back(), begin(), end(), rbegin(), rend().
1) Изменение массива символов, доступного через константную перегрузку data, приводит к неопределённому поведению.
2) Изменение завершающего нулевого символа, хранящегося по адресу data() + size(), на любое значение, отличное от CharT(), приводит к неопределённому поведению.

Параметры

(нет)

Возвращаемое значение

Указатель на базовое хранилище символов.

data()[i] == operator[](i) для каждого i в [0, size()).

(до C++11)

data() + i == std::addressof(operator[](i)) для каждого i в [0, size()].

(начиная с 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()));
}

См. также

front
(DR*)
доступ к первому символу
(открытая функция-член)
back
(DR*)
доступ к последнему символу
(открытая функция-член)
c_str
возвращает немодифицируемую версию строки в виде массива символов стандарта C
(открытая функция-член)
data
возвращает указатель на первый символ представления
(открытая функция-член std::basic_string_view<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/basic_string/data

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API