Cout和Printf,選擇哪個更好?
本文轉(zhuǎn)載自微信公眾號「程序喵大人」,作者程序喵大人。轉(zhuǎn)載本文請聯(lián)系程序喵大人公眾號。
網(wǎng)上經(jīng)??吹接腥苏f,不建議使用cout,而應(yīng)該更多使用printf,下面說說我的看法!
個人看法是兩個都不建議用。
下面說下我的理由:
cout方式效率低:每次cout << endl,都會刷新一遍輸出緩沖區(qū)。
cout方式線程不安全:
- std::cout << "Hello " << "World ";
上面代碼其實等同于:
- std::operator<<(std::operator<<(std::cout, "Hello "), "World ");
相當(dāng)于調(diào)用了兩次operator<<,不保證調(diào)用兩次operator<<是線程安全的。
cout方式輸出復(fù)雜的格式很麻煩:比如我想輸出a + b = c:
- std::cout << a << " + " << b << " = " << c << std::endl;
是不是很麻煩,那可以使用printf?
- printf("%d + %d = %d \n", a, b, c);
但printf需要開發(fā)者填入變量格式,如果填寫有誤,有可能打印錯誤,也有可能crash:
- 某個long long 型,使用%d打印會怎么樣?
- 某個int32_t型,使用%lld打印會怎么樣?
- 某個const char* 型,使用%d打印會怎么樣?
- 某個float型,使用%d打印會怎么樣?
所以使用printf會給開發(fā)者帶來負(fù)擔(dān),一定要在打印前確認(rèn)變量的類型,并且一定要保證配置的輸出格式正確,我想大多數(shù)人可能都會在print某個變量前搜索過打印某個類型需要使用哪種格式吧?
那用啥呢?
cout配合format。
- std::cout << std::format("{} + {} = {} \n", a, b, c);
使用format可以把上面的問題全都解決,C++20標(biāo)準(zhǔn)已經(jīng)全面支持使用std::format,如果不打算上C++20??梢钥紤]使用spdlog。
而且平時做項目時基本都使用第三方log庫,沒有幾個調(diào)用這種裸接口的。
歐了,打完收工!