C++ IOS::swap() 函数



C++ 的std::ios::swap()函数用于交换两个ios对象的内部状态,包括格式化标志、缓冲区指针和其他属性。

std::ios::swap() 函数用于维护流的一致性或优化输入/输出操作的性能。

语法

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

void swap (ios& x) noexcept;

参数

  • x − 指示另一个相同类型的流对象。

返回值

此函数不返回任何值。

异常

此成员函数从不抛出异常。

数据竞争

修改两个流对象(*this 和 x)。

示例

让我们来看下面的例子,我们将交换流缓冲区之间的状态标志。

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream x("112");
    std::istringstream y("ABC");
    int z;
    y >> z;
    std::ios::iostate a = x.rdstate();
    std::ios::iostate b = y.rdstate();
    std::cout << "Before Swapping :" << std::endl;
    std::cout << "x state: " << a << std::endl;
    std::cout << "y state: " << b << std::endl;
    x.swap(y);
    a = x.rdstate();
    b = y.rdstate();
    std::cout << "After Swapping :" << std::endl;
    std::cout << "x state: " << a << std::endl;
    std::cout << "y state: " << b << std::endl;
    return 0;
}

输出

以上代码的输出如下:

Before Swapping :
x state: 0
y state: 4
After Swapping :
x state: 4
y state: 0

示例

考虑下面的例子,我们将交换两个 std::stringstream 对象的缓冲区。

#include <iostream>
#include <sstream>
int main()
{
    std::stringstream x1, x2;
    x1 << "TutorialsPoint";
    x2 << "TP";
    std::cout << "Before swapping:\n";
    std::cout << "x1 : " << x1.str() << '\n';
    std::cout << "x2 : " << x2.str() << '\n';
    x1.swap(x2);
    std::cout << "After swapping:\n";
    std::cout << "x1 : " << x1.str() << '\n';
    std::cout << "x2 : " << x2.str() << '\n';
    return 0;
}

输出

以上代码的输出如下:

Before swapping:
x1 : TutorialsPoint
x2 : TP
After swapping:
x1 : TP
x2 : TutorialsPoint
ios.htm
广告