std::endl may cause an unnecessary flush

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

Описание

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

Риск

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

std::cout << "Some content" << std::endl;
эквивалентно:
std::cout << "Some content" << '\n' << std::flush;
Неявная операция промывки может быть ненужной или запланированной. Если ваша программа имеет много операций ввода-вывода, которые используют 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 используется в цикле во время операции записи в файл. Поскольку цикл имеет 100000 итераций, небольшая задержка от каждой неявной операции промывки может сложиться к значительному снижению эффективности.

Использование \n и избегайте заподлицо

В цикле с несколькими итерациями избегайте снижения эффективности операций ввода-вывода при помощи \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