Cout和Printf,选择哪个更好?

开发 前端
网上经常看到有人说,不建议使用cout,而应该更多使用printf,下面说说我的看法!个人看法是两个都不建议用。

[[407763]]

本文转载自微信公众号「程序喵大人」,作者程序喵大人。转载本文请联系程序喵大人公众号。

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

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

下面说下我的理由:

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

cout方式线程不安全:

  1. std::cout << "Hello " << "World "

上面代码其实等同于:

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

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

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

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

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

  1. 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。

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

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

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

欧了,打完收工!

 

责任编辑:武晓燕 来源: 程序喵大人
相关推荐

2017-03-02 14:52:46

2022-09-02 08:28:44

AWS多云云提供商

2019-07-27 09:40:56

MySQLPG数据库

2016-08-05 14:23:15

系统

2020-12-08 10:25:56

HibernateMyBatis数据库

2020-06-08 11:30:04

PGMySQL数据库

2020-08-18 16:10:44

ManjaroArch LinuxLinux

2023-09-05 07:32:22

vscode开源故障

2021-04-12 08:01:21

GridFlexbox网格

2018-12-11 12:38:23

UbuntuMint发行版

2022-06-28 15:16:48

人工智能开发语言程序员

2022-05-22 07:32:36

RPython分析工具

2022-07-21 22:20:55

OzoneApache大数据

2021-05-31 08:57:31

Xcode与Andro

2017-03-22 09:25:26

MySQLPostgreSQL对比

2024-10-21 18:40:16

2023-12-11 07:37:08

mongodb经纬度性能

2021-09-28 09:00:00

开发JavaScript存储

2022-10-28 15:51:24

JavaScript开发Node.js

2019-09-25 14:30:12

Web前端Java
点赞
收藏

51CTO技术栈公众号