相关疑难解决方法(0)

新行字符是否也刷新缓冲区?

我明白,问题,如,差异endl\n已经多次回答SO.但是他们只提到endl能够将缓冲区冲到上面stdout,而\n不是.

因此,我通过刷新缓冲区理解的是,给定的输入存储在一个缓冲区中,并且stdout仅在它遇到endl时或者一些明确的flush函数传递给它.如果是这样,我预计以下代码:

#include <iostream>
#include <unistd.h>

int main(void)
{
    std::cout << "Hello\nworld";
    sleep(2);
    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显示:

2秒后

Hello
World
Run Code Online (Sandbox Code Playgroud)

但实际产量是:

Hello
Run Code Online (Sandbox Code Playgroud)

2秒后

World
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

也不\n应该存储在缓冲区中,只有在endl遇到缓冲区时才会被刷新/显示在上面stdout,但是从我观察到的\n是同样的行为endl.

c++ flush endl

7
推荐指数
2
解决办法
2190
查看次数

带前缀的C++ cout

我想要一个带有前缀的ostream,在cout上重定向的每一行的开头; 我试试这个:

#include <iostream>
#include <thread>
class parallel_cout : public std::ostream
{
public:
parallel_cout(std::ostream& o):out(o){}

template <typename T>
std::ostream& operator<< (const T& val)
{
    out << "prefix " << val;
    return *this;
}

std::ostream& out;

};

int main()
{
 parallel_cout pc(std::cout);
 pc<<"a\nb"<<"c\n";
}
Run Code Online (Sandbox Code Playgroud)

但我有输出

prefix a
b
Run Code Online (Sandbox Code Playgroud)

没有c.为什么这个?

c++ iostream cout ostream

0
推荐指数
1
解决办法
1943
查看次数

标签 统计

c++ ×2

cout ×1

endl ×1

flush ×1

iostream ×1

ostream ×1