zoukankan      html  css  js  c++  java
  • C++ 的两种换行符区别

    当我们在C++执行一个输出语句时,在输出语句最后可以使用 std::endl 建立一个新行。

    但这两种换行方式对程序有不同的影响。

    std::endl

    它在建立一个新的行的同时,还会自动刷新输出缓冲区flush( )。

    它仅仅是建立一个新的行,并不会刷新输出缓冲区。

    下面看一段小程序:

    #include<iostream>
    int main(void)
    {
        std::cout<<"Testing 1"<<std::endl;
        std::cout<<"Testing 2"<<'
    ';
        return 0;
    }
    

    这个程序的输出结果为;

    Testing 1
    Testing 2
    

    从表面上看 std::endl 是没有区别的,因为刷新输出缓冲区属于流的内部处理,无法显性表示。而且由于程序正常结束时会自动关闭流,这两者的区别就更难被体现出来了。

    但是如果程序异常结束时就会看出区别所在:

    • 不刷新流,程序异常结束时文件会不完整
    • std::endl 会刷新流,即使程序异常结束文件也会保持完整

    一般而言 std::endl 的功能是比 要优越的,在写C++程序推荐使用。

    总结

    std::endl = flush +

    比较 std::endl
    本质 是一个指针函数,cout会调用其所指的函数 是一个转义字符
    适用范围 源于C++标准库,是类成员,只能用于C++ 可用于C和C++
    功能 换行后会自动刷新输出缓冲区 换行后不刷新缓冲区,可能还需要自己处理宽字符等事情

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    装箱、拆箱操作发生在
    @Data的注解使用以及在IDEA上安装
    Mysql中 BLOB字段转String的方法
    不属于java语言鲁棒性特点的是
    java object默认的基本方法
    哪个类可用于处理 Unicode?
    类和接口的继承
    抽象类的叙述:
    Hashtable 和 HashMap 的区别是:
    编程之美初赛第一场--焦距
  • 原文地址:https://www.cnblogs.com/RioTian/p/14745829.html
Copyright © 2011-2022 走看看