保存成员函数setf()的返回值

C++ saving the return value of the member function setf()

本文关键字:返回值 setf 成员 函数 保存      更新时间:2023-10-16

简单来说

#include <iostream>
using namespace std ;
int main()
{
    ios_base::fmtflags initial ;
    cout << 10 << ' ' << 15.0 << 'n' ;
    initial = cout.setf(ios_base::fixed);
    cout << 10 << ' ' << 15.0 << 'n' ;
    cout.setf(initial);
    cout << 10 << ' ' << 15.0 << 'n' ;
    return 0;
}

这段代码应该产生以下输出:

10 15
10 15.000000
10 15

但它没有。它产生的结果是:

10 15
10 15.000000
10 15.000000

显然,以初始作为参数的setf调用没有正常工作。

有什么问题吗?

setf将设置标志,但不清除它们。因此,setf(ios_base::fixed)将设置"固定"标志,但setf(initial)将保持其设置。

使用flags来分配所有的标志

cout.flags(initial);

来自std::fixed的位仍然存在于掩码的std::ios_base::floatfield部分。你需要先清除遮罩,然后设置initial:

std::cout.setf(initial, std::ios_base::floatfield);
//                      ^^^^^^^^^^^^^^^^^^^^^^^^^