《Boost程序库探秘——深度解析C++准标准库》之试读

前一阵子还看到一篇文章,说C#要重蹈C++的覆辙,这里说的C++的覆辙是什么呢?是指C++语言过于臃肿的功能特性,导致学习人员的流失。文章说,语言最后的威力是“开发软件”,而不是“比拼新特性”

在大学中,C++算是比较难学的语言。有些学校试图直接让学生们学习C++,结果效果不怎么好。这次,C++11又添加了大量新特性,如lambda,auto等,把C++弄的像动态语言一样。

添加了那么多新特性,而为了照顾用户的习惯和已有的代码。又不能去除一些旧的特性,这样导致了C++越来越臃肿和复杂。记得在哪里看过,好像是塞伯斯塔的程序设计语言一书中说的吧:程序语言发展的一个重要的特性就是易学性。而语言的简洁程度在很大程度上影响了语言的易学性。况且在不抛弃老的特性的情况下,又添加了新的特性。会大大增加语言的学习成本。

令人奇怪的是,C++Primer英文版第五版有1225页,而包含C++11的第六版C++Primer一书仍然只有1200页。并没有增加,反而减少了25页(第六版的C++Primer我没有读,不能评价其内容)。在未来,简洁且同样高效的类C语言——Go语言或许会对臃肿的C++发起挑战。

当然,这只是我的看法,现在还说不清这种大杂烩会对C++的未来产生什么影响。

阅读C++的代码,一直是一件痛苦的事,尤其是STL相关的。C++11的一些新特性,让C++代码的可读性大大增强。如自动类型推导auto,这在基本类型的使用时还没发现其优点,但是在使用模板时,auto就可以大大简化代码。引用一个例子:vector<int>::const_iteratorci = vi.begin();,在引入auto后,就可以简化成auto ci = vi.begin();

此外,还有一些其他的特性值得关注,这里就先不一一细数了。

这本书是关于Boost库的,C++11的出现,势必会对Boost现有的一些库产生影响。为了方便大家,下面就列出一些C++11对Boost库的影响列表(这个列表是网上收集整理翻译来的,可能不准确或不全,请大家见谅):

原Boost库 C++11新的特性或库
BOOST_FOREACH 基于Range的for循环替代。(序列for循环,有点像Python的for循环了)
Functional/Forward 新的标准库std::forward
BOOST_Lambda Lambda表达式
Min-Max 新的标准库std::min|max、std::minmax_element
Move 右值引用
Ratio 新的标准库std::ratio
StaticAssert static_assert
Thread <thread>
Typeof auto, decltype,推断变量或表达式的数据类型
Valueinitialized List-initialization
Array 新的标准库std::array
Bind 新的标准库std::bind
EnableIf 新的标准库std::enable_if
Function 新的标准库std::function
MemberFunction 新的标准库std::mem_fn
Random <random>
Ref 新的标准库std::ref、std::cref
Regex C++11的regex
ResultOf 新的标准库std::result_of
SmartPtr 新的标准库std::unique_ptr、std::shared_ptr、std::weak_ptr
Swap(swapping arrays) 新的标准库std::swap
Tuple 新的标准库std::tuple
TypeTraits <type_traits>
Unordered <unordered_set>、<unordered_map>

Boost库是非常强大的,但对初学者(这里的初学者并不是真正意义上的C++语言初学者,而是已经了解C++基本语法的初学者)来说,当务之急是了解C++11的标准库内容。能用标准库的,尽量用标准库。在熟练以后,使用这本书去查找自己需要的库。不要一头扎进Boost的海洋,那样会让人迷茫而打退堂鼓。

通过阅读本书的样章,会发现这是一本参考书。看到这里,读者或许会说,这不是废话吗,我也知道这是参考书。但我真遇到一些人,将这一类书拿来当教科书使用。或许真有这样的人适合这种学习方法的。不过我建议大家还是把这本书作为电脑旁的参考书使用。您会发现,这本书将在你需要的时候节省您宝贵的时间。

本书实际上是作者写的第二版介绍Boost库的书。所以在样章中介绍的Boost库内容,已经考虑到了C++11的新特性,如在第四章介绍hash时,书中提到了C++TR1草案。昨天的TR1草案,大部分已经变成现在的C++11的特性。所以使用本书,不必担心本书是否“过时”的问题。

罗马不是一天建成的,Boost库也不是一两个月可以了解清楚的。相信在这本书的帮助下,再加上平时的实践,您对Boost库会有一个更深刻的了解。

c++新特性与boost的更多相关文章

  1. C++11新特性总结 (二)

    1. 范围for语句 C++11 引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素 vector<int> vec = {1,2,3,4,5,6}; ...

  2. 转:关于C++14:你需要知道的新特性

    关于C++14:你需要知道的新特性 遇见C++ Lambda C++14 lambda 教程 C++11 lambda表达式 C++标准库:使用 std::for_each std::generate ...

  3. [转载] C++11新特性

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

  4. c++学习书籍推荐《深入理解C++11 C++11新特性解析与应用》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <深入理解C++11:C++11新特性解析与应用>编辑推荐:C++标准委员会成员和IBM XL编译器中国开发团队共同撰写,权威性毋庸置疑.系统.深 ...

  5. C++17 新特性之 std::optional(上)

    最近在学习 c++ 17 的一些新特性,为了加强记忆和理解,把这些内容作为笔记记录下来,有理解不对的地方请指正,欢迎大家留言交流. 引言 在介绍之前,我们从一个问题出发,C++ 的函数如何返回多个值? ...

  6. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  7. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  8. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  9. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

随机推荐

  1. HAXM cannot be installed nutil TV-x is enabled

    提示错误:如图 HAXM cannot be installed nutil TV-x is enabled 问题原因: 电脑没有启动Intel的虚拟化技术 解决方法: 重启电脑,进BIOS中启动VT ...

  2. MySQL主从同步几个文件

    MySQL主从同步:   M锁表 M导出S导入 M解锁 M建同步帐号 S获取点位:产生master.info S开启同步   3306: mysql-bin.0000x mysql-bin.index ...

  3. 双绞线线序+POE供电网线

    0 重点 一般情况下会用1236(橙白.橙.绿白.绿)传输数据,1.2用于发送,3.6用于接收,45(蓝.蓝白)电源正极 78(棕白.棕)电源负极. 一 网线线序 12发 36收 二 poe网线供电 ...

  4. windows7下修改hosts文件无效解决办法

    通常会为了开发方便.或者屏蔽掉一些恶意网站,我们会在hosts(c:\windows\system32\drivers\etc\hosts)文件中进行相应的域名指向,例:

  5. opencv中的图像复制、保存和显示

    接下来几天会写一个opencv的基础系列,与各位相互学习! &1 图像操作 声明图像指针:IplImage* 读入图像: cvLoadImage 创建图像:cvCreateImage 复制图像 ...

  6. 实现chrome扩展启动本地进程 - 补充

    实现chrome扩展启动本地进程 - 补充 标签: chrome扩展启动本地程序访问本地磁盘 2014-10-17 11:42 6753人阅读 评论(17) 收藏 举报  分类: Chrome Plu ...

  7. 你所不知道的Python奇技淫巧

    有时候你会看到很Cool的Python代码,你惊讶于它的简洁,它的优雅,你不由自主地赞叹:竟然还能这样写.其实,这些优雅的代码都要归功于Python的特性,只要你能掌握这些Pythonic的技巧,你一 ...

  8. 【niubi-job——一个分布式的任务调度框架】----如何开发一个niubi-job的定时任务

    引言 上篇文章LZ主要讲解了niubi-job如何安装,如果看过上一篇文章的话,大家应该知道,niubi-job执行的任务是需要用户自己上传jar包的. 那么问题来了,这个jar包如何产生?有没有要求 ...

  9. 安装VS2008无法更改安装路径解决方法

    一直用VS2012 以及 VS2012开发,但是他们都不支持Wince程序的开发,所有要安装VS2008.但是发现VS2008只能安装在C盘,要知道C空间很宝贵的. 经过查找资料发现系统中已经安装了V ...

  10. ThinkPHP之验证码的使用

    ThinkPHP中已经提供了验证码的生成以及验证的功能.下面介绍如何使用验证码.编程的时候还是采用MVC的方式 View层 <!DOCTYPE html> <html> < ...