Spec-Zone.ru › C++

std::basic_stringbuf<CharT,Traits,Allocator>::str

std::basic_string<CharT, Traits, Allocator> str() const;
(1) (до C++20)
std::basic_string<CharT, Traits, Allocator> str() const&;
(начиная с C++20)
template<class SAlloc>
std::basic_string<CharT, Traits, SAlloc> str( const SAlloc& a ) const;
(2) (начиная с C++20)
std::basic_string<CharT, Traits, Allocator> str() &&;
(3) (начиная с C++20)
void str( const std::basic_string<CharT, Traits, Allocator>& s );
(4)
template<class SAlloc>
void str( const std::basic_string<CharT, Traits, SAlloc>& s );
(5) (начиная с C++20)
void str( std::basic_string<CharT, Traits, Allocator>&& s );
(6) (начиная с C++20)
template< class StringViewLike >
void str( const StringViewLike& t );
(7) (начиная с C++26)

Получает и задаёт базовую строку.

В приведённых ниже описаниях buf и mode являются членами данных, используемыми только для пояснения класса *this.

1) Создаёт и возвращает объект std::basic_string, содержащий копию базовой последовательности символов этого std::basic_stringbuf. Для потоков только для ввода возвращаемая строка содержит символы из диапазона [eback(), egptr()). Для потоков ввода-вывода или только для вывода она содержит символы от pbase() до последнего символа последовательности независимо от egptr() и epptr().
Последовательность символов-член в буфере, открытом для записи, может иметь избыточно выделенную память для повышения эффективности. В таком случае возвращаются только инициализированные символы: это символы, полученные из строкового аргумента конструктора, строкового аргумента последнего вызова перегрузки-сеттера str() или в результате операции записи. Типичная реализация, использующая избыточное выделение памяти, хранит указатель на границу инициализированной части буфера; эта перегрузка возвращает символы от pbase() до указателя на границу.
Эквивалентно return std::basic_string<CharT, Traits, Allocator>(view(), get_allocator());. (начиная с C++20)
2) То же, что и (1), за исключением того, что для создания возвращаемого объекта std::basic_string используется a. Эквивалентно return std::basic_string<CharT, Traits, SAlloc>(view(), a);.
Эта перегрузка участвует в разрешении перегрузки, только если SAlloc удовлетворяет требованиям Allocator.
3) Создаёт объект std::basic_string, как если бы он был создан перемещающим конструктором из базовой последовательности символов *this в buf. Возможно, сначала потребуется скорректировать buf, чтобы его содержимое совпадало с содержимым в (1). Затем устанавливает buf в пустое состояние и вызывает init_buf_ptrs(), после чего возвращает объект std::basic_string.
4) Заменяет базовую последовательность символов, как если бы был вызван buf = s, а затем вызывает init_buf_ptrs().
5) То же, что и (4), за исключением того, что тип аллокатора s не является Allocator.
Эта перегрузка участвует в разрешении перегрузки, только если std::is_same_v<SAlloc, Allocator> является false.
6) Заменяет базовую последовательность символов, как если бы был вызван buf = std::move(s), а затем вызывает init_buf_ptrs().
7) Неявно преобразует t в string view sv, как если бы был вызван std::basic_string_view<CharT, Traits> sv = t;, затем заменяет базовую последовательность символов, как если бы был вызван buf = sv, а затем вызывает init_buf_ptrs().
Эта перегрузка участвует в разрешении перегрузки, только если std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> является true.

Параметры

s - объект std::basic_string, содержащий заменяющую последовательность символов
t - объект (преобразуемый в std::basic_string_view), содержащий заменяющую последовательность символов
a - аллокатор, используемый для всех операций выделения памяти для возвращаемого объекта std::basic_string

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

1-3) Объект std::basic_string, содержащий базовую последовательность символов этого буфера.
4-7) Нет

Примечания

К этой функции обычно обращаются через std::basic_istringstream::str(), std::basic_ostringstream::str() или std::basic_stringstream::str().

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_sstream_from_string_view 202306L (C++26) Взаимодействие строковых потоков с std::string_view

Пример

#include <iostream>
#include <sstream>

int main()
{
    int n;
    
    std::istringstream in;  // could also use in("1 2")
    in.rdbuf()->str("1 2"); // set the get area
    in >> n;
    std::cout << "after reading the first int from \"1 2\", the int is " 
              << n << ", str() = \"" << in.rdbuf()->str() << "\"\n"; // or in.str()
    
    std::ostringstream out("1 2");
    out << 3;
    std::cout << "after writing the int '3' to output stream \"1 2\""
              << ", str() = \"" << out.str() << "\"\n";
    
    std::ostringstream ate("1 2", std::ios_base::ate); // C++11
    ate << 3;
    std::cout << "after writing the int '3' to append stream \"1 2\""
              << ", str() = \"" << ate.str() << "\"\n";
}

Вывод:

after reading the first int from "1 2", the int is 1, str() = "1 2"
after writing the int '3' to output stream "1 2", str() = "3 2"
after writing the int '3' to append stream "1 2", str() = "1 23"

Отчёты об ошибках

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

Отчёт об ошибке Применён к Опубликованное поведение Корректное поведение
LWG 432 C++98 1. перегрузка (1) не задавала содержимое
базовой последовательности символов
2. перегрузка (4) не задавала способ
инициализации входной и выходной последовательностей
задано и то и другое
LWG 562 C++98 перегрузка (4) устанавливала epptr() так, чтобы он указывал на позицию сразу после последнего базового
символа, если bool(mode & std::ios_base::out) == true
epptr() можно установить
за этой позицией

См. также

str
получает или задаёт содержимое базового объекта строкового устройства
(открытая функция-член класса std::basic_stringstream<CharT,Traits,Allocator>)
view
(C++20)
получает представление базовой последовательности символов
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_stringbuf/str

Spec-Zone.ru

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