Ответ 1
Номер 2 с поправкой. (std::cout
и '\n'
)
Зачем?
Я прочитал три способа распечатать вещи на консоли в c++ из разных источников.
using namespace std;
и затем используя cout
(CodeBlocks Standard)std::cout
и std::endl;
(c++ Primer)printf
(HackerRank)Что предпочтительнее и почему?
Номер 2 с поправкой. (std::cout
и '\n'
)
Зачем?
Если вы действительно не заботитесь о скорости, оба cout и printf в порядке. Если вам требуется более быстрое время автономной работы, вот несколько указателей:
ios_base::sync_with_stdio(false);cin.tie(NULL);
, Существует два отдельных потока для printf и cout, и по умолчанию они синхронизируются. Из-за этой синхронизации тратится много времени. Эти две строки кода остановят синхронизацию, но следите за тем, чтобы вы не использовали printf, если вы добавляете эти строки, иначе печать может произойти в случайном порядке.endl
если вы хотите очистить выходной буфер. Многие endl могут сделать код медленнее. Использовать cout<<'\n';
вместо.это мой код отладчика, который за эти 10 лет работы c++ помог мне.
std::ostream &debugRecord (const char* fileName, int lineNum, const char* funcName)
{
std::lock_guard<std::mutex> lock(streamMutex_);
return std::cout << "Thread # " << getCurrentThreadId() << " -- "
<< "(" << fileName << ":" << lineNum << "): " << funcName << std::endl;
}
Оба ваших первых пункта делают в основном одно и то же. Лучше использовать std::
вместо using namespace std;
поскольку последний загрязняет глобальное пространство имен и может вызвать конфликты именования.
Не упоминается, что вы можете выборочно выставлять части пространства имен с using <namespace>::<element>;
(например, using std::cout;
). По-прежнему лучше быть подробным с вашими утверждениями, но этот параметр все же не так плох, как разоблачение всего пространства имен.
printf
не так безопасен, как cout
(операторы потока <<
делают хорошую работу по печати, что вы хотите), вам следует избегать ее при запуске.
Ответ зависит от того, что вы хотите сделать. Для вывода, который в основном использует форматы по умолчанию, cout
действительно предпочтительнее из-за безопасности типа и потому что он очень интуитивно понятен.
Если вы хотите сильно форматировать свой вывод, я могу только рекомендовать удивительно универсальный и прямой printf
потому что манипуляторы в cout - это боль. Истина: синтаксис формата printf
, скажем, немного привыкает, но он того стоит. Просто дважды проверьте строку формата, послушайте предупреждения своего компилятора и используйте соответствующие спецификации формата, например, для size_t
и других системных зависимых данных, чтобы оставаться портативными.
Существует также средство для объединения потоков и форматирования стиля printf
, см. fooobar.com/info/307942/..., но я никогда не использовал его. Возможно, кто-то может прокомментировать его удобство использования?