凡亿专栏 | cout和printf,选择哪个更好?
cout和printf,选择哪个更好?

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


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

3cace2c7e5c34f9a85e0f048d47667.jpg


下面说下我的理由:


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某个变量前搜索过打印某个类型需要使用哪种格式吧?


那用啥呢?

43ea6570f4b6def91961c76485aaa1.gif

cout配合format。


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


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


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


欧了,打完收工!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论