std::endl may cause an unnecessary flush

std::endl используется вместо более эффективного \n

Описание

Этот дефект отмечает использование std::endl в операциях I/O и позволяет вам использовать более эффективную альтернативу, \n.

Риск

std::endl вставляет новую строку (\n) сопровождаемый операцией сброса. Например:

std::cout << "Some content" << std::endl;
эквивалентно:
std::cout << "Some content" << '\n' << std::flush;
Неявная операция сброса не может быть необходима или предназначена. Если ваша программа начинает много операций I/O то использование std::endl, неявная операция сброса может значительно уменьшать производительность программы. Поскольку операция сброса неявна, в случае проблемы производительности, она затруднит, чтобы отследить первопричину проблемы.

Фиксация

Используйте \n ввести новую строку по мере возможности.

Если вы требуете операции сброса вместо std::endl, используйте \n сопровождаемый явной операцией сброса, например:

std::cout << "Some content" << '\n' << std::flush;
В этом случае анализ рассматривает ваше использование операции сброса как преднамеренное и не отмечает использование.

Примеры

развернуть все

#include <fstream> 
using namespace std; 

int main() 
{ 
  ofstream aFile("file.txt"); 
  for ( int i = 0; i < 100000; i++) { 
    aFile << "Hello World " << std::endl ; 
  } 
  aFile.close();
  return 0; 
} 

В этом примере, std::endl используется в цикле во время операции записи на файле. Поскольку цикл имеет 100 000 итераций, небольшая задержка от каждой неявной операции сброса может составить в целом значительное сокращение производительности.

Используйте \n и избегайте сброса

В цикле с несколькими итерациями избегайте сокращения производительности операций I/O при помощи \n вместо std::endl.

#include <fstream> 
using namespace std; 

int main() 
{ 
  ofstream aFile("file.txt"); 
  for ( int i = 0; i < 100000; i++) { 
    aFile << "Hello World \n" ; 
  } 
  aFile.close(); 
  return 0; 
} 

Проверяйте информацию

Группа: Производительность
Язык: C++
Значение по умолчанию: 'off'
Синтаксис командной строки: STD_ENDL_USE
Удар: высоко

Введенный в R2020a