C++ 注册回调时未进行输出
我有一个函数,当调用全局C++ 注册回调时未进行输出,c++,C++,我有一个函数,当调用全局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";
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());
}
void回调(std::ios\u base::event evt,std::ios\u base&str,int index)
{
if(evt==std::ios\u base::erase\u事件)
{
std::cout您试图使用std::cout
来输出文本,而std::cout
正在被销毁?请不要告诉我这应该是可行的…静态实例通常在主返回后被销毁:。我在该处理程序和libstdc++中放置了一个断点,如果没有显式的销毁,它们将不会被命中或者调用。我想,因为这个实例不是由您的代码“管理”的,它不仅仅是被省略的,它只是被删除。我似乎找不到一个退出处理程序,它在libstdc++中做任何事情,但是有一个较低级别的IO清理函数用于刷新。您能向我证明它不会工作吗?可能回调是在任何其他操作之前被调用的此外,文档中说析构函数没有触及底层流缓冲区,这意味着它可能会工作。
std::cout.~basic_ostream<char>(); // "Erase event"