Namespaces
Variants

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

С сайта ru.cppreference.net
 
 
 
std::basic_string
 
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()));
}
Переведен только текст "Run this code" на "Запустить этот код". Все HTML-теги, атрибуты и содержимое внутри тегов `
` сохранены без изменений. C++ специфические термины и код не переводились.

Смотрите также

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