开始使用C++11的9个理由

如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢?在我看来,答案毫无疑问是肯定的。我在下面给出了9个理由,它们分为两类:性能优势和开发效率。
获得性能优势
理由1:move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容,简单的复制指针到字符缓冲区将比创建一个新的缓冲区再复制要高效得多。他之所以能工作是因为源对象超出了范围。
然而,在这以前C++并没有判断源对象是不是临时对象的机制。move语义通过除了复制操作外还允许你有一个move构造函数(move constructor)和一个move赋值运算(move assignment)符来提供这个机制。
你知道吗?当你在Visual Studio 2010中使用标准库中的类如string或vector时,它们已经支持move语义了。这可以防止不必要的的复制从而改善性能。
通过在你的类中实现move语义你可以获得额外的性能提升,比如当你把它们存储到STL容器中时。还有,move语义不仅可以应用到构造函数,还可以应用到方法(如vector的push_back方法)。
理由2:通过使用类别属性(type traits,如is_floating_point)和模板元编程(template metaprogramming,如enable_if template),你可以为某些特定的类型定制模版,这可以实现优化。
理由3:哈希表现在已经是标准实现的了,它提供更快速的插入、删除和查找,这在处理大量数据时很有用。你现在可以随便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset这几种数据结构了。
提高效率
提高效率不仅都是在代码性能方面,开发时间也是宝贵的。C++ 11可以让你的代码更短、更清晰、和更易于阅读,这可以让你的效率更高。
理由4:auto关键字可以自动推断类型,所以下面的代码:
vector<vector<MyType>>::const_iterator it = v.begin()现在可以很简单的写成:
auto it = v.cbegin()尽管有些人会说,它隐藏了类型信息,在我看来它利大于弊,因为它减少了视觉混换并展示了代码的行为,还有它可以让你我少打很多字!
理由5:Lambda表达式提供了一种方法来定义匿名方法对象(实际上是闭包),这是代码更加线性和有规律可循。这在和STL算法结合使用时很方便:
bool is_fuel_level_safe()
{
return all_of(_tanks.begin(), _tanks.end(),
[this](Tank& t) { return t.fuel_level() > _min_fuel_level; });
}
理由6:新的智能指针(smart pointer)替换了有问题的auto_ptr,你可以不用担心内存的释放并移除相关释放内存的代码了。这让代码更清晰,并杜绝了内存泄露和查找内存泄露的时间。
理由7:把方法作为first class object是一个非常强大的特性,这让你的代码变得更灵活和通用了。C++的std::function提供了这方面的功能。方法提供一种包装和传递任何可调用的东西-函数指针, 仿函数(functor), lambda表达式等。
理由8:还有许多其它小的功能,如override、final关键字和nullptr让你的代码意图更明确。对我来说,减少视觉混乱和代码中能够更清楚地表达我的意图意味着更高兴、更高效。
另一个开发效率的方面是错误检测。如果你的错误在运行时发生,这意味着你至少需要运行软件,并可能得通过一系列步骤来重现错误,这需要时间。
C++ 11提供了一种方法来检查先决条件并尽早的在可能的时机捕获错误-编译过程中,在你运行代码前。这就是理由9
这是通过静态断言(static_assert)和类别属性模版实现的。这种方法的另一个好处是,它不需要占用任何的运行时开销,没有什么性能损失!
现在开始掌握C++ 11
在C++ 11标准中除了上描述的还有更多的改动和新功能,它需要一整本数来描述。不过,我相信它们是值得你花时间去学习的。你将省去以往花在提高效率上的时间。很多主流的编译器已经开始支持C++ 11的一些标准了。还等什么?开始吧!

(0)

相关推荐

  • DNF绝对强势的刷图大枪

    [作者:TGbus][编辑:大能猫][来源:电玩巴士][发布时间:2009-8-7 9:35:07] 自报家门,本人华北3区51级纯刷图大枪无色的眼眸,为了觉醒才去pk,现在是2段,胜率67%+ 这次 ...

  • 11寸苹果Macbook Air评测

    当我父母决定给我买第一台笔记本电脑的时候,我几乎竭尽全力的凑够了一些额外的资金,并选择购买了一款更加庞大的产品---15英寸的戴尔Inspiron E1505。但是,没过多久我就发现,随着时间的推移和 ...

  • 选择苹果12英寸Macbook的10大理由

    新的MacBook推出后使得苹果潜在用户更加纠结了,原本很多人是在等待MacBook Air更新,结果没想到更新了MacBook的序列,如此一来形成了MacBook、MacBook Air和MacBo ...

  • Acronis Disk Director 11 分区软件中文使用教程(附序列号)

    还没有下载这个“分区之王”软件的朋友们可以点击下方的下载地址,进行下载哦,之所以小编给这款软件冠以分区之王的称号,是在2007年Vista之家刚开通的时候就重点介绍过这款软件. 不需要启动到dos界面 ...

  • 双十一保价规则(双11保价吗)

    "双11"期间,绍兴的商先生在京东上买了一只苹果手机.他反映,商家靠一分钱的赠品,绕过了平台的7天价格保护规则.[1818黄金眼]双11无法退差价,一分钱撬动平台规则?11月2号, ...

  • 王者荣耀11月24日更新内容 太乙真人新宫本武藏上线

    王者荣耀在11月24日进行了一次较大的更新,推出了新英雄太乙真人,重做了宫本武藏,并且对游戏内容和细节进行了调整和改动.现在就跟随小编一起来看看王者荣耀11月24日更新内容,太乙真人新宫本武藏上线. ...

  • 如何打造双11网红爆款?揭晓天猫精灵的全链路营销设计

    在刚刚过去的2017天猫双11全球狂欢节当中,一款网红爆款横空出世--天猫精灵,在很短的时间内登上所有热卖榜单TOP,同时在各大社群平台引发了用户广泛的讨论和传播,双11结束的时候已经是「一机难求」的 ...

  • 摄影师分享54个爱上摄影的理由

    为什么喜欢摄影?为什么开始拍照?每个人爱上摄影的原因都不相同,摄影师Lauren Lim 分享了 54 个她想得到的理由,如果你还在犹疑要不要接触摄影,就要看看,如果你已经深爱摄影,那么可以从文章发掘 ...

  • 《三国志11》最高难度刘备通关

    仔细地看了一下精华的贴子,我觉得自己这个贴子对新人还是有帮助的的,我5天前刚刚下载了这个游戏,版本是这里的版本.玩三国志游戏从来都是从191刘备的正统年代(大概只有我觉得是正统吧!哈哈),最高难度开始 ...