Все-таки какая-та разница должна же быть, иначе зачем создавать 2 одинаковые функции? Может, типо 1 из них унаследован и т.п. если так то вообще никакой разницы нет что использовать???
\n не везде является переносом строк. endl - более универсальное решение, гарантированно работающее на всех платформах. Кроме того endl зовёт flush, который нужен для гарантированной записи (обычно запись происходит не сразу, а буферизуется).
Если поток открыт в текстовом режиме, то '\n' так же преобразуется в то, во что нужно (можете проверить сами).
Единственная разница — это отсутствие неявного вызова std::flush.
Кстати, это очень частый предмет непонимания среди начинающих разработчиков, они любят пихать везде и всюду std::endl, тогда как это может быть причиной потери производительности (сам сталкивался при написании одного алгоритма).
Используйте std::endl тогда и только тогда, когда Вам одновременно нужен и std::flush (например, консольный вывод). В остальных же случаях это может оказаться причиной потери производительности.
@Csklassami std::flush очищает внутренний буфер стандартной библиотеки. То есть обычно при записи в поток данные не сразу передаются ОС, но накапливаются в буфере и отправляются разом.
Каждое опустошение буфера влечёт за собой системный вызов write(), а системные вызовы замедляют работу программы, поскольку процесс вынужден ожидать ядро ОС.
Размер буфера определяется реализацией, у меня BUFSIZ равен 8192, поэтому предположим, что размер буфера равен 8КБ.
Если программа выводит 64 строки длины ≤128 в поток, и в конце каждой ставит std::endl, то write() будет вызван 64 раза.
Если теперь все ендлы заменить на '\n', то поскольку все строки помещаются в буфер (128⋅64=8192), write() будет вызван только один раз.
Это, должно быть, очень грубый пример, но смысл таков.