保存成员函数setf()的返回值
C++ saving the return value of the member function setf()
简单来说
#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);
// ^^^^^^^^^^^^^^^^^^^^^^^^^
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 查找 GCD:并非所有控制路径都返回值
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 如何从 std::thread 返回值
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- 方法错误"not all control paths return a value"和方法不返回值
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- 对fread的返回值感到困惑
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 如何使用 uint64_t 键类型从 std::map<int, std::string> 返回值?
- 使用 std::p air 进行返回值优化
- 保存成员函数setf()的返回值