命名空间
变体
操作

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

来自 cppreference.com
(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() 的结果(例如在 auto *ptr = out.str().c_str();) 上调用 c_str() 会导致悬空指针。

功能测试 Std 功能
__cpp_lib_sstream_from_string_view 202306L (C++26) std::stringstreamstd::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> 的公共成员函数) [编辑]