首页 > 作文

好用的C++ string Format“函数”介绍

更新时间:2023-04-04 08:04:15 阅读: 评论:0

我这个人总是喜欢在写代码时追求极致,比如总是纠结于变量的命名,内存的消耗,执行的效率,接口的便捷性,代码的可扩展性。。。但很多时候需要在他们之间做取舍,这就导致我在编码时经常陷入僵局,唉。。。真是程序员的可悲,为此几年前我还专门将自己的csdn签名改成了现在这样。

今天我又带来一个函数,相比网上其他版本效率更高(不存在额外拷贝问题),使用更便捷(无需预先分配缓存)。

起初我设计的函数如下:相比网上其他的format,特点是降低了内存消耗,也提升了使用的便捷性,但带来了执行效率的下降,而更严重的是存在多线程隐患,不推荐使用。

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方案。上个方案之所以在函数内部使用了static变量,是为了解决函数返回后变量“str”销毁的问题,这也是能让一个format好用的关键问题所在——“如何能在函数返回后,构建好的字符串仍然能够在内存短暂驻留”,如下(利用临时对象特性保证内存短暂驻留)

  /*************************************************************************** desc     : 好用的格式化字符串“函数”,使用方法:**printf(strutil::format("%,%s", "hello", "world").c_str());** param    : [in] pszfmt**          : [in] ...** return   : std::string** author   : xktesla*************************art************************************************/class strutil{public:struc好看的名著t format : std::string{public:format(const char* pszfmt, ...){va_list body;va_start(b实数教案ody, 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;};};
ATMOS

到此这篇关于好用的c++ string format“函数”介绍的文章就介绍到这了,更多相关c++ string format内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 08:04:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/c0208a04a9e0caccd11b30ffeb64ba60.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:好用的C++ string Format“函数”介绍.doc

本文 PDF 下载地址:好用的C++ string Format“函数”介绍.pdf

标签:函数   好用   内存   变量
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图