C++ IOS::copyfmt() 函数



C++ 的std::ios::copyfmt()函数用于将一个流的格式设置复制到另一个流。它将格式设置(如标志、精度和填充字符)从一个流对象传输到另一个流对象,确保格式的一致性。

通过使用 copyfmt(),我们可以简化代码并保持格式的一致性。

调用后,以下成员函数对 rhs 和 *this 返回相同的值 -

元素 描述
flags 格式标志
width 字段宽度
precision precision
getloc 选定的区域设置
iarray 内部可扩展数组*
parray 内部可扩展数组*
fill 填充字符
tie 绑定的流
exceptions 异常掩码(最后复制,见下文

语法

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

ios& copyfmt (const ios& rhs);

参数

  • rhs − 它表示其成员被复制到 *this 的流对象。

返回值

此函数返回 *this。

异常

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

数据竞争

修改流对象(*this),并访问 rhs。

对任何对象的并发访问都可能导致数据竞争。

示例

在以下示例中,我们将考虑 copyfmt() 函数的基本用法。

#include <iostream>
#include <iomanip>
int main()
{
    std::cout << "Original Formatting:\n";
    std::cout << std::setw(10) << 1122 << '\n';
    std::ios x(nullptr);
    x.copyfmt(std::cout);
    std::cout << std::fixed << std::setprecision(2);
    std::cout << "Modified Formatting:\n";
    std::cout << 12.12<< '\n';
    return 0;
}

输出

以上代码的输出如下 -

Original Formatting:
      1122
Modified Formatting:
12.12

示例

考虑以下示例,我们将在此示例中在不同的流对象之间传输格式。

#include <iostream>
#include <iomanip>
int main()
{
    std::cout << "Original Formatting :\n";
    std::cout << std::hex << 462 << '\n';
    std::ostringstream a;
    std::ostringstream x;
    x.copyfmt(a);
    std::cout.copyfmt(a);
    std::cout << "Modified Formatting :\n";
    std::cout << std::dec << 1122 << '\n';
    return 0;
}

输出

以下是以上代码的输出 -

Original Formatting :
1ce
Modified Formatting :
1122
ios.htm
广告