问题:
在一个函数的场景中,我们称之为 printHex,修改 std::cout 的状态(例如,基数、字段宽度等),函数调用后如何恢复原始状态?当使用 std::cout 的后续输出因 printHex 中所做的状态更改而损坏时,就会出现此问题。
答案:
要重新获得对 std::cout 和的控制将其恢复为原始设置,我们可以利用
或者,我们可以使用资源获取即初始化来实现恢复过程(RAII) 自动管理标志的习惯用法。举个例子:
class RestoreCoutFlags { public: RestoreCoutFlags(std::ostream& stream) : _savedFlags(stream.flags()) {} ~RestoreCoutFlags() { stream.flags(_savedFlags); } operator std::streambuf*() const { return stream.rdbuf(); } private: std::ios_base::fmtflags _savedFlags; };
通过这个类,可以实现如下恢复:
{ RestoreCoutFlags r(std::cout); // Code that modifies std::cout flags } // When the block exits, r is automatically destroyed, restoring the flags.
以上是函数修改其格式化标志后,如何恢复'std::cout”的原始状态?的详细内容。更多信息请关注PHP中文网其他相关文章!