C++ IOS::rdbuf() 函数



C++ 的std::ios::rdbuf()函数用于获取或设置与输入/输出流关联的基础流缓冲区。调用此函数时,它返回指向流的流缓冲区的指针,允许对流缓冲区进行低级操作。

语法

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

streambuf* rdbuf() const;
streambuf* rdbuf (streambuf* sb);

参数

  • sb − 它表示指向 streambuf 对象的指针。

返回值

此函数返回调用之前与流关联的流缓冲区对象的指针。

异常

如果抛出异常,则流处于有效状态。如果 sb 是空指针并且成员异常被设置为针对 badbit 抛出异常,则它会抛出成员类型 failure 的异常。

数据竞争

访问或修改流对象。

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

示例

让我们来看下面的例子,我们将交换两个流之间的缓冲区。

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream a, b;
    a << "TutorialsPoint";
    b << "Welcome";
    std::swap(*a.rdbuf(), *b.rdbuf());
    std::cout << "a Now Contains: " << a.str() << std::endl;
    std::cout << "b Now Contains: " << b.str() << std::endl;
    return 0;
}

输出

以上代码的输出如下:

a Now Contains: Welcome
b Now Contains: TutorialsPoint

示例

考虑以下示例,我们将重定向 cin 以从 std::istringstream 对象读取。

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream a("12 2 334");
    int x,y,z;
    std::cin.rdbuf(a.rdbuf());
    std::cin >> x >> y >> z;
    std::cout << "Result : " << x << " " << y << " " << z << std::endl;
    std::cin.rdbuf(std::cin.rdbuf());
    return 0;
}

输出

以下是以上代码的输出:

Result : 12 2 334
ios.htm
广告