《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. Android 下的EXIF

    一.什么是Exif Exif(Exchangeable Image File 可交换图像文件)是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了 ...

  2. 地图投影——高斯-克吕格投影、墨卡托投影和UTM投影

    地图投影(Map Projection) http://baike.baidu.com/view/94066.htm 概念: 地图投影是把地球表面的任意点,利用一定数学法则,转换到地图平面上的理论和方 ...

  3. GeoServer 常见问题总结

    Geoserver安装环境 Geoserver在部署发布服务时,经常会遇到如下问题,现总结如下: 1.忘记了GeoServer Web Admin Page的登陆用户名和密码怎么办? 存储位置:C:\ ...

  4. OAF页面隐藏右上角的全局按钮(主页,注销等)

    OAPageLayoutBean page = pageContext.getPageLayoutBean(); page.prepareForRendering(pageContext); page ...

  5. 构建基于WCF Restful Service的服务

    前言 传统的Asmx服务,由于遵循SOAP协议,所以返回内容以xml方式组织.并且客户端需要添加服务端引用才能使用(虽然看到网络上已经提供了这方面的Dynamic Proxy,但是没有这种方式简便), ...

  6. 用python简单处理图片(3):添加水印

    python版本:3.4 Pillow版本:3.0 一.添加文字水印 from PIL import Image, ImageDraw,ImageFont im = Image.open(" ...

  7. jsoup抓取借书记录

    package tushuguan; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; ...

  8. redis学习笔记——(3)

    7.Redis中的set类型       sadd set value:向set中添加元素value. srem set value:删除set中的元素value. spop set:随机返回并删除s ...

  9. 【ELK Stack】ELK+KafKa开发集群环境搭建

    部署视图 运行环境 CentOS 6.7 x64 (2核4G,硬盘100G) 需要的安装包 Runtime jdk1.8 : jdk-8u91-linux-x64.gz (http://www.ora ...

  10. 用CSS做长度超过长度显示‘...’,当鼠标放上时显示全部内容

    <!DOCTYPE html> <html> <head> <meta name="author" content="Yeeku ...