您现在的位置是:首页 > Javascript
当前栏目
Cout和Printf,选择哪个更好?
2023-03-09 22:04:06 时间
本文转载自微信公众号「程序喵大人」,作者程序喵大人。转载本文请联系程序喵大人公众号。
网上经常看到有人说,不建议使用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。
而且平时做项目时基本都使用第三方log库,没有几个调用这种裸接口的。
欧了,打完收工!
相关文章
- 鲜为人知但很有用的 HTML 属性
- 翻转再翻转!有意思的水平横向溢出滚动
- 自定义计数器小技巧!CSS 实现长按点赞累加动画
- 过五关!React高频面试题指南
- 软件开发中的十个认知偏差
- 不需要 JS!仅用 CSS 也能达到监听页面滚动的效果!
- 一文读懂TypeScript类型兼容性
- Vue 的响应式原则与双向数据绑定
- 快速掌握 TypeScript 新语法:Infer Extends
- JWT教你如何证明你是我的人!
- 一篇带给你 V8 GC 的实现
- 面试官:请使用JS完成一个LRU缓存?
- 通过可视化来学习JavaScript事件循环
- 新的跨域策略:使用 COOP、COEP 为浏览器创建更安全的环境
- 为什么有人说 vite 快,有人却说 vite 慢?
- 种草 Vue3 中几个好玩的插件和配置
- 超全面的前端工程化配置指南
- Vue 状态管理未来样子
- Volatile关键字能保证原子性么?
- 面试突击:SpringBoot 有几种读取配置文件的方法?