C++ 使用str()和rdbuf()打印stringstream

C++ 使用str()和rdbuf()打印stringstream,c++,C++,当我有: std::ostringstream oss("Hello"); 为什么这样做有效: std::cout << oss.str(); std::cout这个问题与以下事实有关:oss是ostringstream对象(ostringstream是输出流,所以它的目的是向它写入而不是从它读取),以及流如何管理其内部缓冲区 你可以改变 std::ostringstream oss("Hello"); 到 它将按预期工作。交替使用 std::cout << oss

当我有:

std::ostringstream oss("Hello");
为什么这样做有效:

std::cout << oss.str();

std::cout这个问题与以下事实有关:
oss
是ostringstream对象(ostringstream是输出流,所以它的目的是向它写入而不是从它读取),以及流如何管理其内部缓冲区

你可以改变

std::ostringstream oss("Hello");

它将按预期工作。交替使用

std::cout << oss.rdbuf()->str(); // this will print a copy of all buffer content
std::cout str();//这将打印所有缓冲区内容的副本
例如:

#include <iostream>
#include <sstream>

int main() {
    std::ostringstream oss("Hello");
    std::istringstream oss2("Hello");
    cout << oss.rdbuf()->str() << endl;  // prints "Hello"
    cout << oss2.rdbuf();                // prints "Hello"
    return 0;
}
#包括
#包括
int main(){
std::ostringstream oss(“你好”);
std::istringstream oss2(“你好”);

ostringstream类的cout str()对象使用包含字符序列的字符串缓冲区。可以使用成员str直接作为字符串对象访问此字符序列。这解释了第一部分

std::ostringstream oss("Hello");
std::cout << oss.str(); // works
std::ostringstream oss(“你好”);
std::cout@templateboy还有什么需要我解释的吗?没有。我现在明白了。谢谢!但是操作符
操作符的定义
#include <iostream>
#include <sstream>

int main() {
    std::ostringstream oss("Hello");
    std::istringstream oss2("Hello");
    cout << oss.rdbuf()->str() << endl;  // prints "Hello"
    cout << oss2.rdbuf();                // prints "Hello"
    return 0;
}
std::ostringstream oss("Hello");
std::cout << oss.str(); // works
std::cout << oss.rdbuf()->str();
std::cout << oss.rdbuf();