2

basic_ostreamグローバルオブジェクトのデストラクタが呼び出されたときにテキストを標準出力に出力するようにコーディングされた関数があります。この関数をストリームに登録しましたが、何らかの理由で何もしません:

void callback(std::ios_base::event evt, std::ios_base& str, int index)
{
    if (evt == std::ios_base::erase_event)
    {
        std::cout << "Erase event";
    }
}

int main()
{
    std::cout.register_callback(callback, index());
}

エラー/警告はなく、デストラクタへの明示的な呼び出しを追加しない限り、何も出力されません。

std::cout.~basic_ostream<char>(); // "Erase event"

そうするのは間違っていることを認識しているので、それを回避策とは見なしません。バッファから出力をフラッシュしようとしましたが、役に立ちませんでした。なぜこうなった?GCC 4.8 でコードを実行しています。これがデモです。

4

1 に答える 1

1

が破棄されているstd::cout間にテキストを出力するために使用しようとしていますか? std::coutそれがうまくいくはずだと私に言わないでください...

于 2013-11-03T01:27:00.887 に答える