知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

C++入门简单实例

发表时间:2022-03-25来源:网络

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

大家可以关注一下B站新人up主,一起进步!

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

1. C语言风格

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



2. C++风格

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



3. 函数模板

使用template,可处理各种数据类型和字符串的转换,用户代码中调用了哪个类型,编译器才会编译相应的目标代码,灵活性很大。

当然这个例子中还要考虑字符串转换出来的数值,不能超出数据类型的最大值,这个不是讲述的重点。重点在于,通过这几种风格的代码,展现一下为了解决一个简单的问题,在C++中我们到底能有多少选择。

我是因为平时编写代码时需要用到上述功能,用的多了,就慢慢总结出了这么一套做法,当然比较粗糙,下面来看个不粗糙的。

某日翻阅boost的文档,发现boost里居然已经提供了类似功能的lexical_cast。

其定义形式如下:

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

和我的设计具有相同的一个缺陷,浮点数的精度无法控制。更详细的内容,请参见boost库的相关文档。


结语:从上面的例子我们可以看出,同样是使用C++语言,不同的编程风格写出来的代码却相差很大。C++功力越深,写出来的代码越抽象,越难以理解,但越灵活,越简洁。当然,代码写得越简洁,越有老板越觉得你有工作偷懒的危险^_^。

————————————————

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜