zoukankan      html  css  js  c++  java
  • c++ primer plus 第二章 与endl在输出上的区别

        在书上看到如下一段话:

        一个差别是,endl确保程序继续运行前刷新输出(将其立即显示在屏幕上):而使用“ ”不能提供这样的保证,这意味着在有些系统中,有时可能在您输入信息后才会出现提示。

        理解: 只代表换行的转义字符,endl除了代表换行,还紧跟着刷新缓冲区。

        见如下代码:

    ////////////////////////////////////////////////////////////
    #include <iostream>
    //this header is for vs2012
    //#include <chrono>
    //#include <thread>
    #include <fstream>
    #include "windows.h"
    
    int main()
    {
        std::ofstream ofile("e:\a.txt");
        
        // "hello, file"字符串输出到文件流对象ofile中的缓冲区中
        //ofile << "hello, file";
        ofile << "hello, file" << std::endl;
        
        // 程序暂停执行30秒,在程序暂停期间打开e:a.txt文件发现里面内容为空
        // 可以证明文件流对象中缓冲区的内容还为输出到磁盘文件中
        // 如果加上std::endl,可以发现文件内容已有hello, file字符串,说明
        // std::endl操纵符是强制刷新缓冲区内容
        //std::this_thread::sleep_for(std::chrono::seconds(30));
        Sleep(30000);
        
        // 关闭文件流对象
        ofile.close();
        return 0;
    }

    以上注释已经很明了了。大家可以运行试试。

    缓冲区的理解:

    缓冲区是用作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储工具。通常,像磁盘驱动器这样的设备以512字节(或更多)的块为单位来传输信息,而程序每次只能处理一个字节的信息。缓冲区帮助匹配不同的信息传递速率。从磁盘文件中每次读取一个字符需要大量的硬件活动,速度非常慢。缓冲方法则从磁盘中一次读取大量的信息,将这些信息存储在缓冲区中,然后每次从缓冲区里读取一个字节。输出时,程序首先填满缓冲区,然后把整块数据传输给硬盘,并清空缓冲区,以备下一批输出使用。这被称为刷新缓冲区。

  • 相关阅读:
    查找整数
    寒假作业3
    寒假作业2
    寒假作业1
    秋季学期总结
    对自己影响最深的三位老师
    自我介绍
    jquery学习笔记
    素材网站
    转:vim模式下报错E37: No write since last change (add ! to override)
  • 原文地址:https://www.cnblogs.com/qijicxl/p/3398892.html
Copyright © 2011-2022 走看看