问题标签 [endl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::endl 不是多余的吗?
在以下情况下会发生刷新:
- 标准::cerr
- 标准::cin
- 程序终止
- 在许多实现中,标准输出是行缓冲的,这意味着“\n”无论如何都会刷新
所以似乎在大多数常规程序中,std::endl 基本上是不必要的,但它几乎无处不在。
c++ - endl 操纵器在哪里定义
我们知道这endl
是操纵器,它在内部放入'\n'
缓冲区,然后刷新缓冲区。在哪里endl
定义?什么是endl
宏或函数或变量或类或对象?如何定义自己的endl
操纵器?
c++ - 支持 __LINE__ 宏等的 C++ 风格 Logger
我想制作一个可以像 一样使用的记录器std::cout
,但我想记录一些额外的数据,例如日期、时间、、,__LINE__
并且__func__
应该__FILE__
自动保存到文件中。
例子
预期产出
解决方案不足
为此,我必须将诸如__LINE__
直接之类的宏放在我调用记录器的行中,否则宏将无法正常工作。我发现我可以std::endl
用我的宏替换,它会像这样执行这个黑魔法:
该宏logendl
使用我的ToolLogger
类中的静态变量来保存 的值__LINE__
,__func__
并在__FILE__
以后需要。所以实际使用记录器将如下所示:
在课堂上,我必须重载operator<<
才能让它工作,我需要其中两个。一个用于取正常值,如std::string
or int
,另一个用于取std::endl
操纵器。这是我班上最重要的事情:
问题
这个解决方案的问题是我可以通过两种方式使用我的记录器:
所以实际上我需要operator<<
从我的类中删除带有std::endl
机械手的类,并以其他方式解决它,但该怎么做呢?我正在考虑将宏更改std::endl
为logendl
其他自定义操纵器,然后这个自定义操纵器将完成实际正在执行的工作operator<<
,但我不知道该怎么做。我正在寻找其他解决方案,有什么建议吗?
python - C++ 输出流未用 endl 刷新并且执行停止
cout
我有一个包含多个语句的 C++ 程序。我确保它们都以endl
. 我的问题是程序很少停止,直到用户按下 Enter 键(所以我假设输出缓冲区并不总是按应有的方式刷新)。按回车键恢复程序执行。这很成问题,因为我的程序需要几个小时才能执行,所以我不能一直按 Enter!请注意,有时程序会在一分钟后停止,而其他时间会在一个多小时后停止。
这是一个小代码片段:
请注意,我通过嵌入 Python 使用 Theano,并且我的 Python 代码还包含打印语句。我的 Python 代码只调用 print,而不是sys.stdout.flush()
在每次打印之后调用。但是,在 Python 生成的打印语句之后程序执行挂起的情况很少见。我错过了什么明显的东西吗?我应该sys.stdout.flush()
在 Python 代码中调用吗?不幸的是,我无法提供更多代码,因为我的程序由几十个类组成。
[编辑] 当程序挂起时,我用调试器暂停了程序,并且没有可显示的源。调用堆栈是:
似乎有一个线程正在等待。但是,我自己并没有设置这些线程。它们要么由 Cuda 生成,要么由我也在使用的 Havok 物理引擎生成。我会调查的。
c++ - 符号 endl 和 cout 无法解析
我已经从我正在阅读的一本书中编写了这段代码,但我的编译器警告说符号 cout 和 endl 无法解析。这是为什么。
c++ - C++ cout.endl() 清除缓冲区,cout.flush() 不清除
问题出在我正在使用的 IDE 中 - CLion 1.2.4 在其自己的输出窗口中给出了不正确的输出,已解决。
以下代码在使用大于 ~1000 的向量时给出重复输出,例如:
泡泡0.265596泡泡0.2655960.171889泡泡0.2655960.1718890.265644外壳000
如果我在每次输出后调用 endl ,一切似乎都很好:
气泡
0
0.015626
0.015628
外壳
0
0
0
但是当我尝试使用 .flush() 清除缓冲区时,我得到了相同的重复输出。
c++ - 在 GNU g++ 4.9.2 中重载 endl 编译问题
我在使用 GNU g++ 4.9.2 编译以下代码片段时遇到问题(用于在 g++ 2.95.3 中正常编译)
错误如下:
请指导/帮助。
c++ - 尽管实现了专用的非模板函数,但 std::endl 不适用于重载 operator<<
我有一些Logging::Logger
具有以下功能的类:
以及以下代码:
尽管所有运算符似乎都已实现,但我收到以下错误:
错误 C2678:二进制“<<”:未找到采用“const Logging::Logger”类型的左侧操作数的运算符(或没有可接受的转换)
当然,如果endl
一切正常。
我看过以下答案:
重载 operator<< 时 std::endl 的类型未知
我错过了什么?