我已经阅读了三种使用c ++从各种来源打印到控制台的方法。
using namespace std;
然后使用cout
( CodeBlocks标准)std::cout
和std::endl;
( C ++ Primer )printf
( HackerRank )哪个更受欢迎?为什么?
答案 0 :(得分:21)
第2号修正案。 ('\n'
和using namespace std
)
为什么?
答案 1 :(得分:4)
除非你真的关心速度,否则cout和printf都没问题。如果你想要更快的运行时,这里有一些指示:
ios_base::sync_with_stdio(false);cin.tie(NULL);
。 printf和cout有两个独立的流,默认情况下它们是同步的。由于这种同步,浪费了大量的运行时间。这两行代码将停止同步,但如果添加这些行,请注意不要使用任何printf,否则打印可能会以随机顺序进行。endl
。很多endl可以使代码变慢。请改用cout<<'\n';
。答案 2 :(得分:2)
这些是我的调试器代码,在这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;
}
答案 3 :(得分:1)
你的第一点基本上都是一样的。最好使用std::
而不是using namespace std;
,因为后者会污染全局命名空间并导致命名冲突。
未提及的是您可以使用using <namespace>::<element>;
选择性地公开名称空间的某些部分(例如using std::cout;
)。使用您的语句仍然是更好的做法,但这个选项仍然没有暴露整个命名空间那么糟糕。
printf
不如cout
安全(流<<
运营商可以很好地打印您想要的内容),您应该在开始时避免使用它。
答案 4 :(得分:0)
答案很大程度上取决于你想做什么。对于主要使用默认格式cout
的输出确实是首选,因为类型安全,并且因为它非常直观。
如果你想要大量格式化你的输出,虽然我只能推荐令人惊讶的多功能和直截了当的printf
因为cout中的操纵者很痛苦。是的:printf
格式的语法确实让我们习惯了,但它确实值得。只需仔细检查格式字符串,听取编译器的警告,并使用正确的格式说明符,例如for size_t
和其他系统相关数据,以保持便携性。
还有一个用于组合流和printf
样式格式的增强工具,请参阅https://stackoverflow.com/a/15106194/3150802,但我从未使用过它。也许有人可以评论它的可用性?