在C++的cout中,“fixed”的相反是什么?

15

使用 cout 时,在 <iomanip> 头文件中默认定义了什么格式化程序?换句话说,一旦我使用 cout << fixed << setPrecision(2) 将格式化程序设置为 fixed,我该如何将其改回来?或者说,我要将其改回到什么状态?

4个回答

17

cout.unsetf(std::ios_base::floatfield); this working with C++11 but not std::defaultfloat - Abhishek Mane
还有cout.unsetf(std::ios_base::floatfield);,为什么它只是反转了fixed的效果,而没有包含任何像fixed这样的关键字,这意味着为什么它不重置precision - Abhishek Mane

5

3
默认的浮点数和科学计数法是不同的。它并不完全是“改变回来”。 - SOFe

1

我可以设置一个“默认值”吗? - Moshe
我相信默认值是 std::ios::scientific - Chad
@Moshe:不幸的是,没有简单的方法可以完全重置流。即使我见过的最精细的代码(由James Kanze在十多年前编写)也会错过一些微妙的属性,比如iwordpword。(当然,James完全意识到这些限制。)但是,您可以通过std::ios::flags()取得相当大的进展。 - sbi
1
重置流最简单的方法是默认构造它。在某些情况下,将输出格式化为ostringstream,然后只需将已格式化的输出作为std :: string发送到cout,可能更加昂贵。通常,输出不是我花费大量时间优化或调查性能问题的地方,因为通常其他硬件相关问题会比任何性能降低更重要。 - Chad

1

std::fixed的相反是std::scientific,这可能适合您。

然而,如果您想要恢复更多标志,或者如果需要先前的状态,而不是默认状态,则可以使用更好的解决方案:

  1. std::resetiosflags操作器可让您将特定标志重置为其默认值;

  2. 两个ios::flags函数让您保存和恢复格式标志的先前值。


1
嗯,在“返回默认值”的意义上,std::fixed的相反是不是std::scientific。它更像是一种自动格式切换模式。 - Cheers and hth. - Alf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接