热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

将流绑定到自身

如何解决《将流绑定到自身》经验,为你挑选了1个好方法。

为什么这个代码在g ++和clang(libstdc ++)上成功运行,但是给libc ++一个分段错误:

#include 

int main()
{
    std::cout.tie(&std::cout);
    std::cout <<123;
}

我认为应该发生的是std::cout.flush()应该在输出实际发生之前调用.为什么会出现分段错误?



1> T.C...:

[ostream.unformatted]/P7:

basic_ostream& flush();

7效果:表现为无格式输出功能[...]

[ostream.unformatted]/P1:

每个未格式化的输出函数通过构造类的对象开始执行sentry.

[ostream的::岗哨]/P2:

explicit sentry(basic_ostream& os);

2如果os.good()非零,则准备格式化或未格式化的输出.如果os.tie()不是空指针,则调用 os.tie()->flush().324

3 [...]

324os.tie()->flush()如果函数可以确定不需要同步,则不一定会发生调用.

如果你将一个流绑定到自身,然后刷新流,它构造一个sentry,它试图刷新流,构造一个sentry,它试图刷新流,构造一个sentry,试图刷新流,构造一个sentry......我想你知道这是怎么回事.

如果你得到(非)幸运,实施可能会跳过flush()每个脚注324 的呼叫; 否则,你会看到这个网站的标题.


它不会_anywhere_!
推荐阅读
author-avatar
手机用户2502875927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有