zoukankan      html  css  js  c++  java
  • c++新特性与boost

    《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 基于Rangefor循环替代。(序列for循环,有点像Pythonfor循环了)
    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++11regex
    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库会有一个更深刻的了解。

  • 相关阅读:
    低版本ie模式 360兼容模式的兼容性调节以及控制代码
    360浏览器兼容模式样式乱码的原因及解决办法
    iOS开发之UILabel
    代码大全--第六章--可以工作的类
    读书笔记--软件项目成功之道
    extern "C"的用法解析(转)
    基于Ubuntu 15.04 LTS编译Android5.1.0源代码 (转)
    Global.asax 文件是什么(转)
    设备扩展(DEVICE_EXTENSION)
    IRP_MJ_CREATE
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3571510.html
Copyright © 2011-2022 走看看