当我可以使用endl
时,是否有理由将cout
与\n
一起使用?我的C ++书说要使用endl,但我不明白为什么。是\n
不像endl
那样广泛支持,还是我错过了什么?
答案 0 :(得分:70)
endl
将'\n'
添加到流上的 和 调用flush()
。所以
cout << x << endl;
相当于
cout << x << '\n';
cout.flush();
流可以使用内部缓冲区,该内部缓冲区在刷新流时实际流式传输。在cout
的情况下,您可能不会注意到差异,因为它与cin
以某种方式同步(绑定),但对于任意流(例如文件流),您会注意到例如,多线程程序的差异。
Here这是一个有趣的讨论,为什么需要冲洗。
答案 1 :(得分:6)
endl
不仅仅是\n
字符的别名。当您向cout
(或任何其他输出流)发送内容时,它不会立即处理和输出数据。例如:
cout << "Hello, world!";
someFunction();
在上面的例子中,有一些某些机会在刷新输出之前开始执行函数调用。使用endl
强制执行刷新,然后再执行第二条指令。您还可以使用ostream::flush
函数确保使用。
答案 2 :(得分:-2)
endl是一个函数而不是关键字。
#include <iostream>
int main()
{
std::cout<<"Hello World"<<std::endl; //endl is a function without parenthesis.
return 0;
}
要了解endl的图片,首先需要了解&#34;指向函数的指针&#34;主题。
查看此代码(在C中)
#include <stdio.h>
int add(int, int);
int main()
{
int (*p)(int, int); /*p is a pointer variable which can store the address
of a function whose return type is int and which can take 2 int.*/
int x;
p=add; //Here add is a function without parenthesis.
x=p(90, 10); /*if G is a variable and Address of G is assigned to p then
*p=10 means 10 is assigned to that which p points to, means G=10
similarly x=p(90, 10); this instruction simply says that p points to add
function then arguments of p becomes arguments of add i.e add(90, 10)
then add function is called and sum is computed.*/
printf("Sum is %d", x);
return 0;
}
int add(int p, int q)
{
int r;
r=p+q;
return r;
}
编译此代码并查看输出。
返回主题...
#include <iostream>
//using namespace std;
int main()
{
std::cout<<"Hello World"<<std::endl;
return 0;
}
iostream文件包含在此程序中,因为cout对象的原型存在于iostream文件中,而std是名称空间。使用它是因为cout和endl的定义(库文件)存在于命名空间std中; 或者您也可以使用&#34;使用命名空间std&#34;在顶部,所以你不必写&#34; std :: coutn&lt;&lt; .....&#34;在每个cout或endl之前。
当您在没有paranthesis的情况下编写endl时,您将函数endl的地址赋予cout,然后调用endl函数并更改行。 背后的原因是
namespace endl
{
printf("\n");
}
结论:在C ++背后,C的代码正在运行。