发表时间:2022-03-25来源:网络
教授C++,如果还使用Hello World的例子作为入门,那就弱爆啦!它只能告诉你不要用printf,要用cout。但是,为什么?这两个有什么区别?cout就代表了C++吗?我们还是整点有技术含量的吧。

问题:编写“字符串与数值互相转换”的函数。

这种方式至少存在如下几个问题:(1)字符串的长度有限制;(2)必须预先定义一个数组存储字符串,使用数组也有内存泄露的危险;(3)调用C的库函数,受制于函数参数约束。

使用C++的string stream,可处理变长字符串,无内存泄露之虞。但无扩展性,因为如果要求是double类型与字符串互相转换,需要再写两个重载函数。

使用template,可处理各种数据类型和字符串的转换,用户代码中调用了哪个类型,编译器才会编译相应的目标代码,灵活性很大。
当然这个例子中还要考虑字符串转换出来的数值,不能超出数据类型的最大值,这个不是讲述的重点。重点在于,通过这几种风格的代码,展现一下为了解决一个简单的问题,在C++中我们到底能有多少选择。
我是因为平时编写代码时需要用到上述功能,用的多了,就慢慢总结出了这么一套做法,当然比较粗糙,下面来看个不粗糙的。
某日翻阅boost的文档,发现boost里居然已经提供了类似功能的lexical_cast。
其定义形式如下:

也是采用模板的形式定义的一套东西,用于string和数值的相互转换。简单的使用例子如下:

和我的设计具有相同的一个缺陷,浮点数的精度无法控制。更详细的内容,请参见boost库的相关文档。
结语:从上面的例子我们可以看出,同样是使用C++语言,不同的编程风格写出来的代码却相差很大。C++功力越深,写出来的代码越抽象,越难以理解,但越灵活,越简洁。当然,代码写得越简洁,越有老板越觉得你有工作偷懒的危险^_^。
————————————————
皓盘云建最新版下载v9.0 安卓版
53.38MB |商务办公
ris云客移动销售系统最新版下载v1.1.25 安卓手机版
42.71M |商务办公
粤语翻译帮app下载v1.1.1 安卓版
60.01MB |生活服务
人生笔记app官方版下载v1.19.4 安卓版
125.88MB |系统工具
萝卜笔记app下载v1.1.6 安卓版
46.29MB |生活服务
贯联商户端app下载v6.1.8 安卓版
12.54MB |商务办公
jotmo笔记app下载v2.30.0 安卓版
50.06MB |系统工具
鑫钜出行共享汽车app下载v1.5.2
44.7M |生活服务
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-03-26
2022-02-15
2022-02-14