C++ IOS::set_rdbuf() 函数



C++ 的std::ios::set_rdbuf()函数用于为输入/输出流对象设置新的流缓冲区。它允许将 I/O 操作重定向到不同的缓冲区,从而能够自定义处理 I/O 操作。

语法

以下是 std::ios::set_rdbuf() 函数的语法。

void set_rdbuf (streambuf* sb);

参数

  • sb - 指向 streambuf 对象的指针(此指针不能为 null)。

返回值

此函数不返回任何值。

异常

如果抛出异常,则流处于有效状态。

数据竞争

修改流对象。

并发访问同一个流对象可能会导致数据竞争。

示例

让我们看下面的例子,我们将把 std::cout 重定向到 std::ostringstream。

#include <iostream>
#include <sstream>
int main()
{
    std::ostringstream x;
    std::streambuf* a = std::cout.rdbuf(x.rdbuf());
    std::cout << "Welcome To, TutorialsPoint." << std::endl;
    std::cout.rdbuf(a);
    std::cout << " " << x.str() << std::endl;
    return 0;
}

输出

以上代码的输出如下:

Welcome To, TutorialsPoint.

示例

考虑以下示例,我们将把 std::cin 重定向到 std::istringstream。

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream x("1 2.12 POLO");
    std::streambuf* y = std::cin.rdbuf(x.rdbuf());
    int a;
    double b;
    std::string c;
    std::cin >> a >> b >> c;
    std::cin.rdbuf(y);
    std::cout << " " << a << ", " << b << ", " << c << std::endl;
    return 0;
}

输出

以下是以上代码的输出:

1, 2.12, POLO
ios.htm
广告