Подтвердить что ты не робот

Зачем использовать endl, когда я могу использовать символ новой строки?

Есть ли причина использовать endl с cout, когда я могу просто использовать \n? В моей книге на С++ используется endl, но я не понимаю, почему. Не поддерживается ли \n так широко, как endl, или я что-то не хватает?

4b9b3361

Ответ 1

endl добавляет '\n' к потоку и вызывает flush() в потоке. Так

cout << x << endl;

эквивалентно

cout << x << '\n';
cout.flush();

В потоке может использоваться внутренний буфер, который фактически передает потоки при потоке. В случае cout вы можете не заметить разницу, так как она как-то синхронизирована (привязана) с cin, но для произвольного потока, такого как поток файлов, вы заметите разницу в многопоточная программа, например.

Здесь интересная дискуссия о том, почему может понадобиться промывка.

Ответ 2

endl больше, чем просто псевдоним для символа \n. Когда вы отправляете что-то в cout (или любой другой выходной поток), он не обрабатывает и не выводит данные немедленно. Например:

cout << "Hello, world!";
someFunction();

В приведенном выше примере есть вероятность, что вызов функции начнет выполняться до выключения. Используя endl, вы принудительно выполняете сброс до выполнения второй команды. Вы также можете убедиться, что с помощью функции ostream::flush.

Ответ 3

endl - это функция, а не ключевое слово.

#include <iostream>
int main()
{
 std::cout<<"Hello World"<<std::endl;  //endl is a function without parenthesis.
 return 0;
}   

Чтобы понять картину endl, вам сначала нужно понять тему "Указатель на функции".

посмотрите на этот код (в 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 - пространство имен. Он используется, потому что defination (файлы библиотеки) cout и endl присутствует в пространстве имен std; Или вы также можете использовать "using namespace std" сверху, поэтому вам не нужно писать "std:: coutn < <....." перед каждым cout или endl.

когда вы пишете endl без paranthesis, вы указываете адрес функции endl cout, после чего вызывается функция endl и изменяется строка. Причина:

namespace endl
{
printf("\n");
}

Заключение: За С++ работает код C.