Richeir
【日记君】9 个开始使用 C++ 11 的理由
展开Biu

本帖最后由 Richeir 于 2012-6-19 14:27 编辑

如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用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关键字可以自动推断类型,所以下面的代码:

[mw_shl_code=cpp,true]vector<vector *本站禁止HTML标签噢* >::const_iterator it = v.begin()[/mw_shl_code]

现在可以很简单的写成:

[mw_shl_code=cpp,true] auto it = v.cbegin()[/mw_shl_code]

尽管有些人会说,它隐藏了类型信息,在我看来它利大于弊,因为它减少了视觉混换并展示了代码的行为,还有它可以让你我少打很多字!

理由5:Lambda表达式提供了一种方法来定义匿名方法对象(实际上是闭包),这是代码更加线性和有规律可循。这在和STL算法结合使用时很方便:

[mw_shl_code=cpp,true] bool is_fuel_level_safe()

{

return all_of(_tanks.begin(), _tanks.end(),

[this](Tank& t) { return t.fuel_level() > _min_fuel_level; });

} [/mw_shl_code]

理由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的一些标准了。还等什么?开始吧!

注:很多名词觉得翻译成了中文还不如看英文来的舒服,翻译成了中文的后面括号里备注了原英文单词。

[查看全文]
ID:L1
日记2012年6月11日 第一天
展开Biu

本帖最后由 ID:L1 于 2012-6-12 04:35 编辑

想学《C++ 程序设计》不知道(c++基础) 是什么关系 我完全不会。也不知道怎么学。 我是渣渣我来吐槽。。如何开始第一步。。

[查看全文]
Richeir
原创 手把手教你使用Google Reader
展开Biu

本帖最后由 Richeir 于 2012-6-3 17:01 编辑

@21#先把坑挖了

@8#已填坑50%


作为一名技术宅,最重要的就是自己每天手机信息的能力【知道的多,才能找到拯救世界之物嘛】。现在的技术相比几年前已经有了非常大的进步,收集信息的手段和方法都在变化,本版主给大家说一下自己平时用到的工具~


先来看度娘的百科词条:

Google Reader是Google提供的在线RSS阅读工具,在经过了几次更新后,已经有比较多的忠实的使用者。

接下来说明一下什么是RSS:

RSS(简易信息聚合,也叫聚合内容)是一种描述和同步网站内容的格式。

版主吐槽:

其实RSS就是一个XML格式的文件,可以随时获取到。如果网站添加新的文章或者评论,就会把新增内容的简介写进这个XML文件里面, 所谓的阅读器就是定时的去获取这个XML文件,然后和旧版本的进行比对,得出新的内容,这些内容就是所谓的“新闻”~

现在的阅读器非常多,从WordPress的默认订阅可以看出来。

本文先说一下如何使用Google阅读器,其它网络阅读器的评测会慢慢写。

Google Reader的地址

http://www.google.com/reader/view

首次登陆需要输入Google的账户,没有的话,就注册一个吧~作为一名技术宅,Google娘的账户是必须的!

以下是版主Google Reader的起始页面

Google Reader的初始状态下,已经给你了几个默认的RSS源,我看过之后没有感兴趣的,索性就全部删除了。

关于删除源,可以点击每个源最右边的小三角,然后有一个弹出菜单,然后点击“取消订阅”即可~

添加RSS源的话非常简单,只需要点击左上角的“订阅”大按钮,然后把订阅的地址粘贴过来,再点一下添加就可以了~

查看RSS源很简单,只需要点击订阅的站点,就会在显示当前源的条目~

[查看全文]
ID:L1
IT最难是什么。。
展开Biu

IT最难是什么。

[查看全文]
软软的上嘴唇
一切从零开始外挂制作-基础篇
展开Biu

这是教程,结果我也不知道要放在哪个版块了,囧

华为网盘的,下载需注册

本内容已隐藏,回复后刷新可见哦

[查看全文]
_Nozomi
版块近期将会被删除
展开Biu

有关技术性讨论等帖子会移动至OOXX研究院

无关帖子将会移动到回收站

请做好标记以及备份

[查看全文]
iuhsihsow
鬼火引擎研究记录
展开Biu

本帖最后由 iuhsihsow 于 2012-10-9 14:50 编辑

约定:

1.上班时间发的,不会太详细,

2.持续更新,当天更新部分会用红字标示,其他都是黑字。

3.标题5号字,其他2号字。

简介

Irrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序或者。NET语言中。通过使用Direct3D(Windows平台),OpenGL 1.2或它自己的软件着色程序,可以实现该引擎的完​全跨平台。尽管是开源的,该Irrlicht库提供了可以在商业级的3D引擎上具有的艺术特性,例如动态的阴影,粒子系统,角色动画,室内和室外技术以及碰撞检测等。

网址:

http://irrlicht.sourceforge.net/

编译个人说明:

如果没有DX8的SDK,在IrrCompileConfig.h里面注释掉_IRR_COMPILE_WITH_DIRECT3D_8_

#if defined(_IRR_WINDOWS_API_) && (!defined(__GNUC__) || defined(IRR_COMPILE_WITH_DX9_DEV_PACK))

//! Only define _IRR_COMPILE_WITH_DIRECT3D_8_ if you have an appropriate DXSDK, e.g. Summer 2004

//#define _IRR_COMPILE_WITH_DIRECT3D_8_

#define _IRR_COMPILE_WITH_DIRECT3D_9_

#endif

突然的一个想法:

虽然刚接触鬼火,但是还是觉得到逼一下自己吧,在放假之前,利用下班休息时间,鬼火写个小游戏。第一人视角迷宫。

随便写了下,完成了,写代码不到一个小时吧。。。囧,基本怎么快怎么来(基本上就是随便抄抄例子)。300行代码,一个理论上能随机创建任何大小并允许人以第一视角模式探索的迷宫就出来了。:)挺好用的,贴图,剪裁,碰撞检测,粒子效果都很容易使用。用Dx自己写,1000行左右吧,写得累死,效果还不好。放个对比图。

以上使用irrlicht

以上使用Dx

又回到正题:

先看了下自带的example,结合【irrlicht engine 中文学习指南来看的】,收集整理:By ISclub 翻译:FK_Duzhi。但是还是有很多不会啊,比如,如何给自创的场景节点加上碰撞检测,获取不到mesh啊。

本源:

今天准备花点时间看看源码,结合iduosi 同学的CSDN博客看看吧。

中途的休整:

不要一遍又一遍的造轮子了。

[查看全文]
CyberZHG
本帖最后由
展开Biu

本帖最后由 CyberZHG 于 2014-2-15 11:27 编辑

test

[查看全文]