Spec-Zone.ru › C++

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

(1)
const CharT* data() const;
(до C++11)
const CharT* data() const noexcept;
(с C++11)
(до C++20)
constexpr const CharT* data() const noexcept;
(с C++20)
(2)
CharT* data() noexcept;
(с C++17)
(до C++20)
constexpr CharT* data() noexcept;
(с 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/w/cpp/string/basic_string/data

Spec-Zone.ru

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