std::basic_stringstream<CharT,Traits,Allocator>::str
来自 cppreference.com
< cpp | io | basic stringstream
(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, 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 起) |
管理底层字符串对象的內容。
1) 返回底层字符串的副本。等效于 return rdbuf()->str();.
2) 返回底层字符串的副本,使用 a 作为分配器。等效于 return rdbuf()->str(a);.
3) 返回从底层字符串移动构造的字符串。等效于 return std::move(*rdbuf()).str();.
4,5) 替换底层字符串的內容。等效于 rdbuf()->str(s);.
6) 替换底层字符串的內容。等效于 rdbuf()->str(std::move(s));.
7) 替换底层字符串的內容。等效于 rdbuf()->str(t);.
此重载仅在 is_convertible_v<const T&, basic_string_view<charT, traits>> 为 true 时参与重载解析。
內容 |
[编辑] 参数
s | - | 底层字符串的新內容 |
t | - | 一个对象(可转换为 std::basic_string_view),用作底层字符串的新內容 |
a | - | 用于构造返回字符串的分配器 |
[编辑] 返回值
1,2) 底层字符串对象的副本。
3) 从底层字符串对象移动构造的字符串。
4-7) (无)
[编辑] 注释
由 str
返回的底层字符串的副本是一个临时对象,将在表达式结束时被析构,因此直接在 str() 的结果上调用 c_str()(例如在 auto *ptr = out.str().c_str(); 中)会导致悬空指针。
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_sstream_from_string_view |
202306L | (C++26) | 将 std::stringstream 与 std::string_view 连接,(7) |
[编辑] 示例
运行此代码
#include <iostream> #include <sstream> int main() { int n; std::istringstream in; // could also use in("1 2") in.str("1 2"); in >> n; std::cout << "After reading the first int from \"1 2\", the int is " << n << ", str() = \"" << in.str() << "\"\n"; 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); 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_stringbuf<CharT,Traits,Allocator> 的公有成员函数) |