std::cout 每次使用时重新打印当前在控制台中的所有内容
std::cout re-printing everything currently in the console, each time it is used
出于某种原因,每次我使用 std::cout
时,控制台的全部内容(有点难以解释)都会重新打印,除非我 << endl;
。为了提供一些上下文,我使用 glfw 来支持我的 Window class,它具有更高级别的 std::function 回调。我的编译器是 MinGW 3.21,使用 C++11 MinGW 3.21 实际实现的部分。这是怎么回事?
void Window::setTextCallback(std::function<void(char text)> callback) {
textCallback = callback;
auto onText = [](GLFWwindow* window, unsigned int text, int mods) {
Window* win = reinterpret_cast<Window*>(glfwGetWindowUserPointer(window));
win->textCallback(static_cast<char>(text));
};
glfwSetCharModsCallback(window, onText);
}
然后在 main.cpp
...
Window w;
w.setTextCallback([](char text){
cout << text;
}
当 window 打开时,假设我输入 "asdf"。输出为 "aasasdasdf"。在慢动作中,它是:"a"、"aas"、"aasasd"、aasasdasdf"。
但是,如果我将 main.cpp
更改为:
Window w;
w.setTextCallback([](char text){
cout << text << endl;
}
输出为:
“一个
小号
d
f"
不出所料。
没有其他线程在使用 cout
我知道这一点,因为我没有任何其他线程。这种行为不会发生在其他地方。
cout
是一个缓冲区。因此,每次您 <<
到它时,您只是在添加文本,它会一直保持下去。 endl
是一种刷新缓冲区的方法。如果你只想打印你推入其中的最后一点文本,你需要从空开始。 Try this post 然后我相信您的谷歌搜索可以解决您对此可能有的任何问题。