查看原文
其他

cout和printf,选择哪个更好?

程序喵大人 程序喵大人 2022-08-22

网上经常看到有人说,不建议使用cout,而应该更多使用printf,下面说说我的看法!


个人看法是两个都不建议用。


下面说下我的理由:


cout方式效率低:每次cout << endl,都会刷新一遍输出缓冲区。


cout方式线程不安全

std::cout << "Hello " << "World ";


上面代码其实等同于:

std::operator<<(std::operator<<(std::cout, "Hello "), "World ");


相当于调用了两次operator<<,不保证调用两次operator<<是线程安全的。


cout方式输出复杂的格式很麻烦:比如我想输出a + b = c:

std::cout << a << " + " << b << " = " << c << std::endl;


是不是很麻烦,那可以使用printf?

printf("%d + %d = %d \n", a, b, c);


但printf需要开发者填入变量格式,如果填写有误,有可能打印错误,也有可能crash

  • 某个long long 型,使用%d打印会怎么样?

  • 某个int32_t型,使用%lld打印会怎么样?

  • 某个const char* 型,使用%d打印会怎么样?

  • 某个float型,使用%d打印会怎么样?


所以使用printf会给开发者带来负担,一定要在打印前确认变量的类型,并且一定要保证配置的输出格式正确,我想大多数人可能都会在print某个变量前搜索过打印某个类型需要使用哪种格式吧?


那用啥呢?

cout配合format。

std::cout << std::format("{} + {} = {} \n", a, b, c);


使用format可以把上面的问题全都解决,C++20标准已经全面支持使用std::format,如果不打算上C++20。可以考虑使用spdlog。


关于C++20新特性,可以看全网首发!!C++20新特性全在这一张图里了


而且平时做项目时基本都使用第三方log库,没有几个调用这种裸接口的。


欧了,打完收工!





C++学习资料免费获取方法:关注程序喵大人,后台回复“程序喵”即可免费获取40万字C++进阶独家学习资料。





往期推荐


1、少写点
if-else吧,它的效率有多低你知道吗?
2、年度原创好文汇总
3、全网首发!!C++20新特性全在这一张图里了
4
他来了,他来了,C+
+17新特性精华都在这了
5、一文让你搞懂设计模式
6、C++11新特性,所有知识点都在这了!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存