【发布时间】:2011-01-17 09:59:51
【问题描述】:
假设我有这样的代码:
void printHex(std::ostream& x){
x<<std::hex<<123;
}
..
int main(){
std::cout<<100; // prints 100 base 10
printHex(std::cout); //prints 123 in hex
std::cout<<73; //problem! prints 73 in hex..
}
我的问题是,从函数返回后,是否有任何方法可以将cout 的状态“恢复”到其原始状态? (有点像std::boolalpha 和std::noboolalpha..)?
谢谢。
【问题讨论】:
-
我相信十六进制只持续到下一次移出操作。仅当您手动更改格式标志而不是使用操纵器时,更改才会持久。
-
@BillyONeal:不,使用操纵器与手动更改格式标志的效果相同。 :-P
-
如果您是因为 Covertiy 发现 未恢复 ostream 格式 (STREAM_FORMAT_STATE) 而来到这里的,请参阅 Coverity finding: Not restoring ostream format (STREAM_FORMAT_STATE)。
-
我做了类似的事情 - 请参阅我的代码审查问题:Use a standard stream, and restore its settings afterwards。
-
这个问题很好地说明了为什么 iostream 不比 stdio 好。刚刚发现两个讨厌的错误,因为 not-/semi-/fully-/what-not 持久性 iomanip。