终于要离开学校了,终于有时间可以静下来看看之前导师推荐的书籍。之前有看到说《程序员修炼之道》是对程序员影响最为深刻的书, 就从它开始吧。用这个还算可以的音响听着音乐,看书很惬意啊。 顺便吐槽下京东,我买了本地有货的三本书,三天了我还没见到。这效率实在是fuck。 第一本书的第一章是电子版上看的,还好我有kindle。这里基本上说的是沟通方面的。我发现我的沟通确实有点问题,不太主动,表达含糊。之前只和ultramanhu交流比较多,可能是多年的默契吧,表达清楚意思不怎么费劲。现在的一起合租的xboy(和qboy很像啊),和他交流经常文不对题,开始我总以为他习惯岔开话题,但是后来发现在其他有些人身上也出现过这种问题。看来我的表达力确实有问题,一直说ben大神的表达力低下,其实他只是我这种更恶化一些罢了。不管怎么说,之前看到过个视频,我觉得很有道理,对世界的理解应该是 “知其然 — 知其所以然 – 知其知其所以然 – 知其知其所以然所以然”。别人也是属于世界的一部分,了解别人看待事物和自己不一样、了解别人看待事物的角度、了解别人为什么和自己看待事物的和自己不一样,都是自身对这个世界的理解。同样,自己要表述的意思让各种各种各样的人有理解并且有兴趣听也是自身表达能力的一种体现。Maybe,这就是我大学生活孑然一身(不完整啊)的原因吧。T_T “注重实效的哲学”,其中最重要的部分当属那个WISDOM离合诗了吧。

这是我对C++新特性系统学习的最后一部分,之后就靠实践中再来看新标准的新特性啦。

在之前,我对这部分没太在意,直到看到了一篇文章 [http://blog.csdn.net/pongba/article/details/1659952](http://blog.csdn.net/pongba/article/details/1659952) 才意识到,C++的多线程操作也是个麻烦的问题。

简而言之,C++编译器在进行编译优化的时候,认为当前是单进程的,并且遵循**可观察行为**(Observable Behavior)不变的原则。就是说在可观察行为不变的情况下,操作是可以被改变顺序的,而单进程可观察行为不变,不代表在多进程的情况下仍然不变。还是上大牛的例子:

_**例子一:**_

完全可以优化成

C++在效率上有个硬伤。我们知道C#和Java对于类传递都是以引用的方式,而C++默认都是传值。在传值过程中就经常会进行复制构造,这完全没必要而且浪费CPU,为了解决这种问题,于是乎C++11 增加了一个新的非常数引用(reference)类型,称为右值引用(R-value reference)。我就专门看了一下关于右值引用的东西。 右值引用在GCC 4.3之后开始支持,VS 2010(VC 10.0)已经支持,再前一点的VC版本没试过所以不知道。 右值引用的申明标记为T &&,主要用于处理临时变量,比如函数返回的变量(暂时想不出其他例子,忽略返回值优化吧,(命名)返回值优化参见http://efnetcpp.org/wiki/Return_value_optimization,再说返回值优化能力有限是吧,比要求如单返回语句、不能使用异常等等),避免复制构造。同时在析构的时候就不会析构这个临时变量,从而提升效率。 上代码:

之前用Google的Protobuf感觉真是个很好用的东西,于是抽时间研究了下他的数据的存储方式,以后可以扩展其他语言的解析器。其实与其说是研究,不如说是翻译。这些文档里都有,可能有些地方理解的不太对,还请见谅。

这各部分主要是一些很实用和在一些地方帮助编译器自动推断类型的库和函数 首先是引用包装 类名 template< class T > class std::reference_wrapper; 这个类保存了对一个类实例、(成员)函数(指针) 构造时必须传入所引用的对象或引用对象的右值引用 主要方法有 =号操作符, 用于重新绑定引用对象 类型转换操作符, 用于转换为模板目标类的引用类型 get方法, 用于获取引用的对象 ()操作符, 用于执行引用的函数

绑定函数是我认为C++新标准里第二有用的库了 绑定库的使用环境是:

  • GCC-C++ 4.3 及以上
  • Visual Studio 2008 SP1 及以上
  • BOOST 1.25及以上(其中function是1.16及以上)

先来看一段代码

这回的两个库没怎么用过,这里的记录就用VC++写了,使用G++和BOOST的时候和智能指针类似。

首先是Tuple

要注意的是这里G++,VC++和BOOST库的函数不太一样,所以使用的时候要注意没有使用到编译器和编译器相关的函数(特别是IDE的弹窗的方法要注意)。

Linq是.NET 3里新增的东西,我在软件工程课程设计里初步应用到一点,而且主要用在Lambda表达式上,今天算是在好奇心驱动下尝试了一下在数据库方面的应用。

好久没写这种类型的代码,感觉真是退步了很多。 这是我第一次参加Google Code Jam,以前有过报名可是没有做过。 我发现Google Code Jam的题目使用经典算法的几乎没有,都是模拟或者数学题(起码我目前做过的几题是这样)

很多时候看到C/C++的一些奇妙的应用,每次都是惊奇一点时间就随风飘过了 现在我还是决定记录一下这些有意思的东西。

2010/04

a ^= b ^= a ^=b; 这是一个交换值得有意思的方式