【发布时间】:2016-02-09 06:40:51
【问题描述】:
我觉得我在问一个非常基本的问题,但我无法在这里或在 Google 中找到答案。我记得我们在学校被教过这个,但是多年来它已经消失了。
为什么在输出列表中间调用cout.precision() (std::ios_base::precision()) 会影响整个流?我知道应该使用std::setprecision() 来动态更改精度的规则,并且cout.precision() 会用它返回的值破坏输出。但这是什么机制呢?是缓冲的原因吗?手册说这些“做同样的事情”,但凭经验我可以看出这并不完全正确。
MCVE:
const double test = 1.2345;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
cout << test << endl << cout.precision(3) << test << endl;
// Output:
// 1.234
// 21.234
// after the same init
cout.precision(2);
cout << test << endl << setprecision(3) << test << endl;
// Output
// 1.23
// 1.234
这是“特定于实施/标准未定义”吗? 请随意将其标记为重复,因为我无法在 SO 上找到它。
【问题讨论】:
标签: c++ iostream c++-standard-library