在C ++中重置std :: cout的整数或双精度的属性

时间:2013-08-22 02:02:49

标签: c++ cout iomanip

在我的代码中的不同位置,我设置了某些流属性,例如在std::cout << fixed << 4.56342;中,以便操作integerdouble在打印到标准输出时的显示方式。有时在特定的运行时流程中,std::cout使用而不进行任何操作,但由于前面的操作,输出会被无意中转换。

那么,重置std::cout的所有此类属性的最佳方法是什么,以便调用std::cout<<的行为与下面的示例完全相同:

#include <iostream>

int main(int argc, char **argv) {
    // let X be an integer or a double
    std::cout << X;
    return 0;
}

我看到Effective use of C++ iomanip library,一般不直接使用操纵器是有道理的。这将是一个很好的战略。尽管如此,知道如何撤消所有这些操作会很好,如上所述。

1 个答案:

答案 0 :(得分:2)

使用resetiosflags

std::cout << std::resetiosflags( std::ios_base::basefield ); // clears integer manipulations
std::cout << std::resetiosflags( std::ios_base::floatfield  ); // clears floating-point manipulations
std::cout << std::resetiosflags( std::cout.flags() ); // clears all flags