std::basic_stringbuf<CharT,Traits,Allocator>::str
< cpp | io | basic stringbuf
(1) | ||
std::basic_string<CharT, Traits, Allocator> str() const; |
(C++20 前) | |
std::basic_string<CharT, Traits, Allocator> str() const&; |
(C++20 起) | |
template<class SAlloc> std::basic_string<CharT, Traits, Allocator> 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 起) |
获取和设置底层字符串。
为解释目的,令 buf_
代表保有底层字符序列的内部 std::basic_string 对象。定义缓冲指针初始化如下:
- 对于输入流( bool(mode & std::ios_base::in) == true ),使 eback() 指向首字符, gptr() == eback() ,而 egptr() == eback() + buf_.size() :后继输入将读取首个字符串的字符。
- 对于输出流( bool(mode & std::ios_base::out) == true ),使 pbase() 指向首字符而 epptr() >= pbase() + buf_.size() (允许
epptr()
指向更后,以令后随的sputc()
不会立即调用overflow()
)
|
(C++11 起) |
- 对于非后附输出流,使 pptr() == pbase() ,从而后继输出将重写字符串的字符。
1) 创建并返回保有此
std::basic_stringbuf
底层字符序列副本的 std::basic_string 。对于仅输入流,返回的字符串含来自范围 [eback(), egptr()) 的字符。对于输入/输出或仅输出流,含有 pbase() 到序列中末字符的字符,不考虑 egptr() 和 epptr() 。
为写入打开的缓冲区中的成员字符序列能为效率目的过分配。该情况下,仅返回初始化的字符:从构造函数 string 参数获得的字符、最近对 |
(C++11 起) |
等价于 return std::basic_string<CharT, Traits, Allocator>(view(), get_allocator()); 。 |
(C++20 起) |
2) 同 (1) ,除了用
a
构造返回的 std::basic_string
。等价于 return std::basic_string<CharT, Traits, SAlloc>(view(), a); 。此重载仅若 SAlloc
满足分配器 (Allocator) 的要求才参与重载决议。3) 创建 std::basic_string 对象,如同以 std::move(buf_) 初始化。可能需要首先调节
buf_
以使之含有同 (1) 的内容。构造该 std::basic_string
对象后,设置 buf_
为空并进行缓冲指针初始化,然后返回 std::basic_string
对象。4) 如同用 buf_ = s 替换底层字符序列,然后进行缓冲指针初始化。
5) 同 (4) ,除了
s
的分配器的类型不是 Allocator
。此重载仅若 SAlloc
与 Allocator
不是同一类型才参与重载决议。6) 如同用 buf_ = std::move(s) 替换底层字符序列,然后进行缓冲指针初始化。
参数
s | - | 保有替换字符序列的 basic_string 对象
|
a | - | 返回的 basic_string 的所有内存分配所用的分配器
|
返回值
1-3) 保有此缓冲的底层字符序列的
basic_string
对象。4-6) (无)
注解
常通过 std::basic_istringstream::str() 、 std::basic_ostringstream::str() 或 std::basic_stringstream::str() 访问此函数。
示例
运行此代码
#include <sstream> #include <iostream> int main() { int n; std::istringstream in; // 亦能用 in("1 2") in.rdbuf()->str("1 2"); // 设置获取区 in >> n; std::cout << "after reading the first int from \"1 2\", the int is " << n << ", str() = \"" << in.rdbuf()->str() << "\"\n"; // 或 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"
参阅
获取或设置底层字符串设备对象的内容 ( std::basic_stringstream<CharT,Traits,Allocator> 的公开成员函数) | |
(C++20) |
获得底层字符序列上的视图 (公开成员函数) |