簡體   English   中英

重置ostream,C ++

[英]Resetting an ostream, C++

我有2個不同的ostream,其中一個是cerr,使用相同的streambuffer,我有一些庫可能會以某種方式修改cerr,(flags?format modifiers?)。

cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);

cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";

打印:

This
is
a
test
This is a teststream test

調試mystreambuffer我注意到CERR調用mystreambuffer->sync()每次<<操作,同時teststream不會調用它。
如果我是正確的cerr只是一個標准的ostream,那么,為什么我在沖洗時間看到這種差異? 如何將cerr重置為正常的沖洗操作?

編輯:我看到你們正在評論unitbuf並且它在cerr中是默認的,但是如果它是默認的,那么它也不會在這里一步一步地寫出來嗎?

#include <iostream>
int main(){
    std::cerr << "This " << " is " << " a cerr " << " test\n";
    std::cout << "This " << " is " << " a cout " << " test\n";
}
Cobain /tmp$ ./test 
This  is  a cerr  test
This  is  a cout  test

試試std::cerr.unsetf( std::ios_base::unitbuf ); 默認情況下,該標志為cerr

ios :: unitbuf標志是cerr默認設置的原因。

您需要使用nounitbuf操縱器來修復它。 一些較舊的庫可能沒有它,如果是,那么使用unsetf。

編輯:unitbuf的默認設置是依賴於實現的:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM