欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

好用的C++ string Format“函數(shù)”介紹

 更新時間:2021年12月28日 14:12:58   作者:xktesla  
大家好,本篇文章主要講的是好用的C++ string Format“函數(shù)”介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

我這個人總是喜歡在寫代碼時追求極致,比如總是糾結于變量的命名,內存的消耗,執(zhí)行的效率,接口的便捷性,代碼的可擴展性。。。但很多時候需要在他們之間做取舍,這就導致我在編碼時經常陷入僵局,唉。。。真是程序員的可悲,為此幾年前我還專門將自己的CSDN簽名改成了現(xiàn)在這樣。

今天我又帶來一個函數(shù),相比網上其他版本效率更高(不存在額外拷貝問題),使用更便捷(無需預先分配緩存)。

起初我設計的函數(shù)如下:相比網上其他的Format,特點是降低了內存消耗,也提升了使用的便捷性,但帶來了執(zhí)行效率的下降,而更嚴重的是存在多線程隱患,不推薦使用。

const std::string& StrUtil::Format(const char* pszFmt, ...)
{
	va_list body;
	va_start(body, pszFmt);
	int nChars = _vscprintf(pszFmt, body);
 
    std::mutex mtx;
    mtx.lock();
    static std::string str; // 非線程安全,因此下面使用互斥鎖
	str.resize(nChars + 1);
	vsprintf((char*)str.c_str(), pszFmt, body);
    mtx.unlock();
	
    va_end(body);
 
	return str; // 非線程安全
}

然后,我又設計出了第二個Format方案。上個方案之所以在函數(shù)內部使用了static變量,是為了解決函數(shù)返回后變量“str”銷毀的問題,這也是能讓一個Format好用的關鍵問題所在——“如何能在函數(shù)返回后,構建好的字符串仍然能夠在內存短暫駐留”,如下(利用臨時對象特性保證內存短暫駐留)

 
 
/*************************************************************************
** Desc     : 好用的格式化字符串“函數(shù)”,使用方法:
**				printf(StrUtil::Format("%,%s", "hello", "world").c_str());
** Param    : [in] pszFmt
**          : [in] ...
** Return   : std::string
** Author   : xktesla
*************************************************************************/
class StrUtil
{
public:
	struct Format : std::string
	{
	public:
		Format(const char* pszFmt, ...)
		{
			va_list body;
			va_start(body, pszFmt);
			int nChars = _vscprintf(pszFmt, body);
			this->resize(nChars + 1);
			vsprintf((char*)this->c_str(), pszFmt, body);
			va_end(body);
		}
 
	private:
		Format() = delete;
		Format(const Format&) = delete;
		Format& operator=(const Format&) = delete;
	};
};

到此這篇關于好用的C++ string Format“函數(shù)”介紹的文章就介紹到這了,更多相關C++ string Format內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • STL中vector的使用你了解嗎

    STL中vector的使用你了解嗎

    這篇文章主要為大家詳細介紹了STL中vector的使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • QT中線程池QThreadPool類概念和使用方法詳解

    QT中線程池QThreadPool類概念和使用方法詳解

    這篇文章主要為大家介紹了QT中線程池QThreadPool類概念和使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • 使用OpenGL實現(xiàn)3D立體顯示的程序代碼

    使用OpenGL實現(xiàn)3D立體顯示的程序代碼

    本篇文章是對使用OpenGL實現(xiàn)3D立體顯示的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中設置進程優(yōu)先順序的方法

    C語言中設置進程優(yōu)先順序的方法

    這篇文章主要介紹了C語言中設置進程優(yōu)先順序的方法,包括setpriority()函數(shù)和getpriority()函數(shù)以及nice()函數(shù),需要的朋友可以參考下
    2015-08-08
  • 基于C語言實現(xiàn)UDP服務器

    基于C語言實現(xiàn)UDP服務器

    這篇文章主要為大家詳細介紹了如何使用C語言編寫一個簡單的UDP服務器程序,以及如何接收和處理客戶端發(fā)送的數(shù)據(jù),有需要的小伙伴可以了解下
    2024-10-10
  • C++實現(xiàn)逆波蘭式

    C++實現(xiàn)逆波蘭式

    這篇文章主要為大家詳細介紹了C++實現(xiàn)逆波蘭式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C語言代碼實現(xiàn)簡單掃雷游戲

    C語言代碼實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了C語言代碼實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • C語言中判斷兩個IPv4地址是否屬于同一個子網的代碼

    C語言中判斷兩個IPv4地址是否屬于同一個子網的代碼

    這篇文章主要介紹了C語言中判斷兩個IPv4地址是否屬于同一個子網的代碼,需要的朋友可以參考下
    2017-09-09
  • ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式

    ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式

    這篇文章主要介紹了ubuntu系統(tǒng)vscodeC++編譯環(huán)境配置與使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用Qt生成Word和PDF文檔的詳細教程

    使用Qt生成Word和PDF文檔的詳細教程

    Qt 是一個跨平臺的應用程序開發(fā)框架,除了用于創(chuàng)建圖形界面應用程序外,還可以用來生成 Word 和 PDF 文檔,本文將介紹如何使用 Qt 來生成Word和PDF文檔,以及相關的代碼示例,需要的朋友可以參考下
    2023-10-10

最新評論