为什么要使用endl?
一、输出流与缓冲区
在C++中,输出流是一个抽象的概念,一般用于向输出设备(例如屏幕或者文件)输出数据。与之对应的,C++也提供了输入流用于向程序中输入数据。在输出流向输出设备输出数据的过程中,由于输出设备的限制,数据往往需要在内存中保存。而在内存中保存这些数据的区域叫缓冲区。是缓冲区的概念定义出了endl的含义。
二、endl的含义
endl是一个重载的操作符,它的两个作用:
1、输出一个’n’,使得输出的内容向下一行移动。
2、刷新输出缓冲区,并且将缓冲区中的所有内容输出到设备中。
三、为什么要刷新缓冲区?
在C++中,缓冲区的刷新是由系统自动完成的。但是,在以下两种情况下,需要使用手动刷新缓冲区。
1、程序需要立即把缓冲区的内容输出到设备中(例如,程序突然崩溃需要把已经输出的内容全部保存)。
2、缓冲区的内容达到一定大小,需要清空缓冲区。
四、endl的使用示例
示例1
#include <iostream> using namespace std; int main() { cout << "Hello World!" << endl; return 0; }
执行这个程序,会输出字符串“Hello World!”,然后换行,最后刷新缓冲区。这个程序里,endl实际上起到了换行的作用。另外,由于程序结束时缓冲区被自动刷新,所以我们看到了打印的效果。如果我们没有使用endl,程序不会刷新缓冲区,打印的内容就会停留在缓冲区里面。
示例2
#include <iostream> using namespace std; int main() { cout << "Hello "; cout << "World!"; cout << endl; return 0; }
这个程序输出的效果与示例1是一样的。注意到,虽然print语句输出的两个部分中间没有任何操作符,但是打印的效果却不会有问题。这是因为在两次输出之间有缓冲区,程序会自动把两个部分连接起来。但是,如果我们想要把两个部分分别在两行打印,我们就需要像示例1中一样,使用endl去刷新缓冲区。
示例3
#include <iostream> using namespace std; int main() { int i = 10; cout << "The value of i is " << i; i = 20; cout << " and now it is " << i << endl; return 0; }
这个程序输出的内容是:“The value of i is 10 and now it is 20。”特别注意到,我们在输出i的值时,间隔符是字符串“and now it is ”,而不是endl。由于两个部分输出到同一个缓冲区里,程序自动把它们连接成一个字符串。最后,我们使用endl换行刷新输出缓冲区。