C++ 的两种换行符区别


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

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

std::endl

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

\n

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

实例比较

下面看一段小程序:

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

这个程序的输出结果为;

Testing 1
Testing 2

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

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

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

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

总结

std::endl = flush() + \n

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

文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
 上一篇
C++ 之 new 的几种用法 C++ 之 new 的几种用法
运算符newnew最常的用法是作为运算符,这时候new会在堆上分配一块内存,并会自动调用类的构造函数,如: string *str = new string("test new"); new作为运算符时,它是C++内置的,你不能对它做任何的
2010-10-19
下一篇 
C++ 常用的 system 命令 C++ 常用的 system 命令
system命令是用来做和系统有关的DOS命令。 当我们开发的程序需在DOS界面做交互时,system命令就很有用了。 一般来说,能在CMD窗口下执行的命令(所有DOS命令,各种可执行的文件,用户自己编写的程序等),都可以在C++通过sys
2010-09-17
  目录