插入std :: ends后的奇怪输出

时间:2016-02-05 08:01:15

标签: c++

如果我写cout << "Hi!" << ends << "1234";1会在一段时间后消失。从C ++参考,我知道std::ends 在流中插入一个空字符。但这种插入何时发生?

完整的代码是

    #include <iostream>

    int main(int argc, char** argv) {
        std::cout << "Hi!" << std::ends << "1234";
        return EXIT_SUCCESS;
    }

运行程序会显示Before 在0.5秒后,它变为After

1 个答案:

答案 0 :(得分:0)

就语言本身而言,所有cout << ends都会向流写入\0。它关闭流或导致意外重新排序。为了避免任何疑问,在您的情况下,语言保证{<1}}将在 "Hi!"之前缓冲并且在之前缓冲 { {1}}。

我的理解是终端应该默默地忽略\0。 (它应该将其视为NOP,即无操作指令),但有些终端将其误解为空格。

这似乎发生在您的案件中。