C++中的边际效应(Side Effect)与顺序点(Sequence Point)问题

 转自水木BBS

 

 

副作用真是一个很头痛的问题。初学者头痛是因为它令人迷惑,老鸟头痛是因为它会冷不

防叮你一口,只要你稍微粗心一点。当然,老碰到问这样问题的人也让人头痛。

 

为了理解副作用带来的困难,必须要理解C++中的时序点(Sequence Point)的概念。根据I

SO14882:1998中1.9节第7款的叙述,时序点是前一求值中所有副作用已经结束而下一求值

中任何副作用尚未开始的地方。具体地说,有下面四个地方:

1. 在每一个非子表达式结束的地方。用ISO14882中的术语,就是完全表达式(full-expre

ssion)结束的地方。比如一条表达式语句,函数调用的一个完整参数,if语句里的条件表

达式等等;

2. 在一个函数所有参数求值完以后并且在准备调用该函数之前;

3. 当一个函数返回的时候:就是在返回值已经被复制以后,而在运行该函数的任何外部之

前;

4. 在下列表达式中的第一个表达式之后,假设这里用的都是内置的运算符而没有被重载:

 

   //      expr1 && expr2

   //      expr1 || expr2

   //      expr1 ? expr2 : expr3

   //      expr1, expr2

 

理解了时序点的概念以后,其他的问题就迎刃而解了。C++里说的是,如果在两个时序点之

间有两个或者多个副作用,那么这些副作用的时序是不定的。如果表达式的值依赖于这些

副作用间的顺序,那么表达式的值也就是不定的。

 

i=i++;显然就属于这种情况,如果i这里是基本类型的话。而在c.erase(i++)就是另外一种

情况,因为在i++之后调用c.erase之前是有一个时序点的。因此就没有二义性问题。

==============NB的分割线================

说实话,偶看不懂原文的意思,里面有好多怪异的词,譬如“副作用”,“非子表达式”,另外还有一些表达感觉有点蹩脚。可能是偶智商实在太低。

找了几篇更”专业“一点的文章,这里的“副作用”应该就是"Side Effect",个人觉得还是翻译成“边际效应”更贴切一些。

一些关于Side effect和Sequence point文章:

http://en.wikipedia.org/wiki/Sequence_point 其实还是wiki上写的明白。

http://learn.akae.cn/media/ch16s03.html  这差不多是wiki的翻译版,也不错。

 

 

 

 

Windows 7 真的很漂亮!

 前几天看到同学装了Win7,发现毛玻璃效果挺cool的,真好之前也有装Win7的打算,再加上最近XP一直处于半瘫痪状态(XP上被塞了一堆垃圾程序),执行速度缓慢,甚至出现了周期性假死的情况。我深深的意识到该和XP告别了,虽然有它陪伴的日子很美好,但是毕竟是N年前的产品了,经不起我这样的虐待。好的是一直没有出现过大的问题,系统总体来说一直很健康,这得益于我的细心照料。(众人:表喷了。。。)

用上了Win7,第一感觉就是“快”,能感觉到的快,不知道是不是习惯了之前被塞满的XP缘故,Win7的启动速度和运行速度都令我比较满意。Aero效果顺利自动开启。系统评分3.9,瓶颈在显卡上,HD3470这卡属中低端,不过性能还不赖,嘿。

毛玻璃效果真不是盖的,看上去的确有种特殊的美感。传说中的朦胧美吧,哈哈。。。

上个俺的屏幕截图:

Snap2

Snap4
感觉不错吧。。。

看看Opera的效果。

Snap5

Elegant...  注意Opera的标题栏,那是每个网页的微缩预览。。。

Win7一个很大的变化就是任务栏。不像XP那样,Win7的任务栏默认将同类程序归到一组里,同组程序只显示一个图标。这样任务栏就不会乱了,配上Aero的特效,感觉超赞。

另外Win7默认使用的雅黑字体也是越看越顺眼,比宋体可爱多了,哈。。。

估计看到这里有人多人都想鄙视下我吧,很多人很早就用上Win7了,而且用Vista的也都习惯了。不过对我这种第一次接触的来说,冲击还是挺大的。

记得前段时间有条新闻是Linus对着Win7广告竖大拇指的照片,当时认为这大概是调侃,下载觉得Linus很实在,好就是好。Win7的确有了很大的进步,特别是在用户体验上。

没说到的还有很多,包括Win7的缺点(UAC仍然是鸡肋),还有一些其他的新特性等等就不啰嗦了。还没升级的快行动吧。
 

[转]程序员能力矩阵

 一个颇有意思但又很实际的表格,来找找你的位置吧...

汉化版:http://static.icybear.net/[CN]Programmer%20competency%20matrix.htm

 

安装并配置Eclipse for C++ & MinGW & Eclim(嵌入Vim) & gVim环境

—— 建立一个跨平台、支持多语言、完全免费且开源的集成开发环境

前言

        最近迷上了Vim——这个异常强大的文本编辑器,强大到让人愿意花费时间去改掉以前使用其他编辑器所养成的习惯。一直对Code::Blocks的编辑功能不是特别满意,虽然一直跟的Nightly build版提供了不少新功能,但是还是不能完全满足我的需求,而且编辑器的速度越来越慢(因为要做更多的匹配)。

        相比之下,Vim就没有这种问题(Vim的执行效率非常高),虽然命令繁多,短时间内不容易上手,但还是决定想用它作为主要的编辑器。用Vim做编辑器好说,代码补全,定义查找,管理项目等等这些都不算大问题,插件都可以解决,编译可以用Makefile,唯独调试是个大问题,这点是无论如何都不如IDE用的方便的,IDE的调试方式非常直观,我认识那种调试方式的效率更高。

        如果能将Vim的强大编辑功能和IDE的集成开发与调试功能集合到一起,那肯定是绝配!

        搜了一下,目前支持这种方式的有Visual Studio和Eclipse,前者使用的是插件的方式,并不是直接将Vim嵌入到开发环境里,而是用模拟的方式,也就是说跟Vim还是不一样的。而Eclipse+eclim的方式可以将Vim(或者Gvim)完美嵌入到开发环境中,并且Eclipse和eclim都是跨平台的,可以支持Windows/Linux/Mac OS(除了Vim它们都运行在JVM上)。之前对Eclipse有过一点印象,只知道是用Java写,速度不怎么样(不要拍砖,鄙人对运行于VM里的语言都有一种阴影,如果您觉得不爽,请忽略此句)。

        废话这么多,下面进入正题:

1.安装

  1. 安装JDK:下载地址:http://java.sun.com/javase/downloads/index.jsp,选择最新的JDK下载即可,注意看清楚,是JDK而不是JRE哦。
  2. 安装gVIM:gVim是一个基于gtk的Vim程序,它包含完整的Vim版本。下载地址:ftp://ftp.vim.org/pub/vim/pc/gvim72.exe
  3. 登陆http://sourceforge.net/projects/mingw/files/ 下载安装程序并安装,选择组件时使用默认的就好,MinGW也包括了GNU开发的Java,Ada,Objective C等工具,一般来说用不到。
  4. 将MinGW添加到环境变量里:假设安装目录为D:\MinGW,则在环境变量PATH里(用户的或者系统的都可以)添加"D:\MinGW\bin",没有引号,环境变量的多个值要用分号分隔,这样之后安装的Eclipse才能搜索到MinGW。
  5. 安装Eclipse:下载地址: http://www.eclipse.org/downloads/,你会发现Eclipse提供了多种版本,其实这是安装了不同语言组件的Eclipse,为了满足不同程序员的需求而对每种语言做了单独打包,这里下载你需要的版本即可,
    我选得是Eclipse IDE for C/C++ Developers (79 MB),貌似是最小的一个^_^。下载完成后解压到你想要的目录里,这就算安装完成了(没错,它是个绿色软件!!*_*)。还有一些设置,将在下面一起说明。
  6. 安装Eclim:下载地址: http://sourceforge.net/projects/eclim/files/eclim/。下载后会让你选择Eclipse和gVim的安装目录,
    这里选择Eclipse的主目录和vim主目录下的vimfiles目录。然后选择使用的语言,如果Eclipse没有安装相关语言的插件的话,则会自动下载。这里只选择C++,一路Next即可。

2.配置

  1. Eclipse里选择Window -> Preferences -> C/C++ -> New CDT Wizard -> Makefile project,然后切换到Builder Settings,取消"Use default build command"选项,下面框里输入mingw32-make,OK
     Snap1
  2. 设置Vimplugin,将gvim的路径改为安装路径即可。
     Snap2

 

 设置到这里就算完成了。看一下效果:

 Snap3
上面忽略了一些细节设置,如果安装配置有问题请尽管提出来。

2010年最好笑的笑话

中国互联网是开放的

巨蟹的命运

巨蟹是心软的,容易被感动,即使表面看起来总是有一副硬硬的壳,但那壳子底下是一颗柔软敏感到极至的内心。它们面对一份感情是犹豫再三的,不要说它们懦弱,它们只是明白自己是容易受伤的。他们对感情抱有信仰,相信纯真、相信天长地久,所以有时是挑剔的。

这是一层表面坚硬的壳,其实攻克轻而易举,因为蟹蟹有一颗柔软的心。
蟹蟹恋爱了,这时的它们变的很粘人,很婆妈,因为你是它的中心,它会为你考虑很多,饭吃了吗?天气会变了吗?记得带伞哦!路上车多,慢点走哦!……..诸如此类!
蟹蟹是深情而痴情的,爱上一个人会爱的很深,即使明知道没有结果也很难自拔。这是巨蟹的一种固执,想要得到的东西,往往不会轻易放手。有时,一段没有结果的恋情会成为蟹蟹的生活重心。这无疑是痛苦的,但又难以自拔。然而,巨蟹的不安全感又在内心大叫着放弃,所以这时的蟹蟹总是在坚持和放弃的巨大矛盾中苦苦煎熬着。学会放弃是蟹蟹的一门功课.
当然,如果蟹蟹真的决定放弃了,它的坚决会让所有人吃惊。
要记住:除了你自己,没有人可以伤害到你

蟹子是痴情的,但又不善于表达,面对自己心爱的人拘谨、放不开。它们的幽默感此刻变得生涩。

蟹子是深情的,但又不善于把握,为什么一次次控制不住自己的情绪,说出明知不该讲的话?
分裂而善于幻想的寄居蟹在说巨蟹之前,先说说几个一直以来欣赏的几个偶像,他们都不同,但他们有一个共同点,就是,他们都是巨蟹男。周星驰,王家卫,罗大佑,李宗盛,梁朝伟,张学友……一般在每次排行榜中总是靠末的巨蟹们,看起来并没有很明显的个性,但是,他们在艺术方面的直觉和敏锐却是别人难以匹敌,从这几个人名里就不难看出。他们在生活中都是温文尔雅的,被动的,甚至往往是沉默的,但是在他们的电影,歌曲中,却展露出令人惊异的才华,让我们总是不由自主的为之倾倒。当周星驰让我们笑得泪水横流的时候,我们也早听闻其实戏外的他认真严肃,不苟言笑,对待朋友和情人都很苛刻;我们知道在戏里演什么都神形毕似的影帝梁朝伟同性格南辕北辙的射手刘嘉玲20多年同居,至今都不愿结婚,他总是说,其实他的人生就是在戏里;我们知道张学友出道前曾经是黑社会的小混混,天天宿醉,自暴自弃,也看到张学友成名后依然为了家庭拼命打拼,几近崩溃……

这就是巨蟹,其实,最能说明巨蟹特质的,就是--分裂,无论是哪一种蟹,他们都有着分裂的思想。他们渴望安定,也渴望出人头地,他们内心充满艺术的灵感,夸张的幻象,但是在现实生活中,他们总是低眉顺眼,很难真正展露心中的狂想。所以在艺术的舞台上,他们反而得以施展,让心中奇异的狂想放大到极致,他们可以将任何一首歌一个角色演绎的入木三分,所有来自于生活中被动的接受,在艺术的殿堂上得到了最好的宣泄,所以巨蟹真的应该属于舞台。即使没有好的歌喉没有好的外形,但是他们有良好的感受力和表现力,他们的性格实际上更像是一只寄居蟹,在真正自我的生活中,他们常常将自己包裹的很紧,但在诠释和演绎别人的时候,他们那内心的感情得到了释放。

巨蟹座的另一个长处是他们有着哲学的思考力,世界因两股力量相互消长,而水象就是典型的阴柔之力。水象星座的人有一种天生的宇宙观,巨蟹也是如此,加之他们天生有母爱的情结,所以他们的思考往往带有着人性化的关怀。所以从事与艺术相关的行业的巨蟹,无论如何都可以算是幸运的巨蟹,因为能够得以发挥天然的性格所长。但是不是每个巨蟹都有这样的机会,所以大多数巨蟹都会感到自己的压抑和痛苦。他们不是没有渴望,相反他们需求很多,渴望很多,但是他们总是躲在自己的壳里做着各式各样的幻梦,只是在想,很少实施。所以如果你看到的总是低眉顺眼的巨蟹实际上并不是真正的巨蟹。那只是巨蟹的一个假象。

永远无法抹去的自卑巨蟹们其实是自我感觉很好的心高气傲的一群人,但是却又难以克服时时刻刻想躲进壳里的自卑感。他们天生多疑和敏感,碰到困难,就先躲进壳里,自欺欺人,在梦中编织自我的安全感,而从来没有想到如何主动将危机转化为机遇。他们对待困难的消极方式,使他们总很难真正木秀于林,他们总在捕捉他们认为最好的时机,但是那个时机却总是无法到来,其实世间哪有万全之策?当蟹蟹们艰苦的自我互博之时,大好时机已经失去。但是要改变这种天生的自卑感确乎很难,蟹蟹们几乎完全不由自主。

怀旧是巨蟹们的人生主旋律巨蟹们非常怀旧。他们喜欢旧东西,怀恋旧感情,对家庭有着天然的眷恋。泛黄的相片,褪色的丝带,尘封的梳妆台……所有一切带有浪漫情调的旧物,都可以让他们独自神伤,黯然追想,他们总是沉浸在过去的回忆里,永远记得年少时的孤寂敏感,永远记得初恋情人,多年后仍然四处找寻初恋情人的消息,慰籍多年来始终保持新鲜的记忆。所以王家卫的电影总喜欢用这样的句式开头:多年以后……

忽冷忽热患得患失的爱情他们天生悲观,永远需要多一点,更多一点的安全感。为什么他们如此需要安全感,因为他们天生就没有安全感,所以他们是很容易恐慌的,所以他们也就变得非常的多疑和猜忌。爱上一个巨蟹是要仔细思量的,因为他们会突然忽冷忽热,突然置之不理,突然恶言相向,但是其实他们并非不爱你,他们有时候是在跟自己呕气。他们渴望天天24小时同你粘在一起,他们对爱人有着强烈的占有欲,恨不得掏心掏肺给你,他们关注你的点点滴滴,小到为你买一支发卡,大到帮你选择哪路公车……他们都费劲心思,他们时时刻刻每件事都为你考量,但又因为付出的不停增加而变得越来越担心害怕,会不会得不到对等的爱。所以他们会突然变得冷淡了,也许只因为你一个眼神,他们就觉得你已经不如从前,于是开始无休止的试探,他们说话总是转弯抹角,但是却总希望你永远清晰表态,假设某天你也含糊了一下,那就完了,蟹蟹们立刻条件反射的开始惴想出无数个虚拟场景,在无尽的悲观中,意淫出种种悲惨场面,然后再见你时,就已经是冷口冷面,甚至说出无比绝情的话语--所以,你和巨蟹的他们,是要努力去磨合的,给他们足够的信赖和安全,他们回馈你的,绝对让你感动的热泪盈眶。

虚伪包装下易感的心实际上巨蟹善于伪装。他们喜欢笑,无论何时何地,他们常常微笑,也许这笑容有时候让人欣慰,但有时候却会让人感到非常的虚伪。当然巨蟹们也总有自己的小奸小坏,但是他们虚伪的前提却总是先为了保护自己。他们对自己应得的利益是淄铢必较,有时候会让人感到他们是不是很小心眼,但是,在朋友聚会等场合上,他们又绝对是豪爽大方,主动抢着付账的人。所以其实巨蟹是个公私概念很明确的人,他们对该得的绝对毫不客气,而对待朋友,他们又觉得其实这点钱根本不算什么。他们是眷恋朋友和家人的,他们基本都有些喜欢酒。而且酒量都还不错,因为他们眷恋那种宾客相尽欢的气氛,更眷恋着家的和乐融洽之感。所以巨蟹们喜欢做饭,即使不会做饭也对美食有天然偏爱,他们懂得享受居家生活,所以巨蟹们有个理想婚姻是最快乐的事情。问题是巨蟹们却常常选择晚婚或不结婚,因为他们多疑又害怕,他们总是对新幻境充满怀疑,对新的家庭又向往又拒绝,在自我矛盾中,不断蹉跎了年华。

自己为自己创造安定感觉巨蟹们总是不安,这是一种不好的感觉,因为如此,许多巨蟹枉然蹉跎,终日郁郁。其实,巨蟹们可以尝试自己为自己创造安定的感觉。找一个家里人都喜欢的对象,建立一个自己的家,也许巨蟹会发现自己会变得安稳很多。找个摩羯是比较理想的选择。或者找一个自己的爱好,倾注所有的心血,自己也会变得安定很多。当然蟹蟹们也许会说,你这是站着说话不腰疼啊,要是那么容易的话,还用得着你说吗?呵。但是,无论怎样,当我们自己意识到自己的不安,就该努力去克服他,其实壳外的世界,没有那么可怕,这是真的。
总的说来,巨蟹们很可爱,尤其是在艺术上有成就的那些人,他们创造的都是令人仰止的丰碑,所以巨蟹们不必没来由自卑,其实你们都很有魅力的。

 

URxvt节省资源大法

 因为经常在X下使用命令行,装了个很多人推荐的URxvt作为默认终端(其他终端例如xterm等都被我用它替换了),经常执行多个程序,所以需要开多个终端,这样比较占资源。偶然发现URxvt支持deamon和client模式,只要运行urxvtd然后运行用urxvtc来启动终端就可以了。这样只会有一个urxvtd守护进程。也许实际占用内存未必会减少,但是减少了任务调度的开销。

我的做法是在X启动时自动启动urxvtd,用urxvtc替换urxvt。 

sudo mv /usr/bin/urxvt{,.bak}
sudo ln -s /usr/bin/urxvt{,c}
### 以下写在~/.xinitrc里 #######
urxvtd -q -f -o&
#### 重启一下X即可生效 ####

解决URxvt启动缓慢

 安装fcitx并开启后发现启动URxvt启动缓慢,原因就是输入法在URxvt下出现字体错误。搜索了一下,网上给出的答案是:

  • 带参数运行: urxvt -pt Root 
  • 或者
  • 将"URxvt.preeditType: Root“写入~/.Xresources

我试的第一种方法可行,第二种方法没有效果,后来发现一个更好的解决方法,原理就是制定输入法的显示字体:

在~/.Xdefaults里加入一下几行 

URxvt.preeditType: OffTheSpot
URxvt.inputMethod:fcitx
URxvt.imFont: -microsoft-microsoft yahei-medium-r-normal–0-0-0-0-p-0-iso10646-1

这里OffTheSpot指光标更随,URxvt.imFont:后面是字体,如果你的系统里没有这个字体或者想换别的字体,则运行xlsfonts,输出一堆字体,选一个复制过来即可。

最后重启一下X即可。

 

 

解决Linux 下 vi不能使用方向键的问题

 最近用Archlinux发现用vi时不能使用方向键(按控制键都会转换成符号),解决方法就是用vim代替vi...  操作如下:

rm /usr/bin/{r,}view
pacman -S vim
mv /usr/bin/vi{,.bak}
ln -s /usr/bin/vi{m,}

 

以前用Ubuntu时也发现过这个问题,遇到同样情况的朋友不妨试一试这个办法...

《九降风》 - Winds of September

13581_2008052110304012

简介:

        一场意外让几位好友不安骚动的灵魂,瞬间落入猜疑、背叛、性与暴力,成长的难题,是否真会让生命与友情变得脆弱无常。

故事没什么特别的,但是看过的人都会体会到那种青春的叛逆和躁动,很不错的一部电影!

这部电影给我的感觉就是:这就是青春。每个从那个年龄走过的人(不管男女)都会明白这部片子的内涵,虽然这部片子在很多人看来可能根本没内涵。

可能是很少看这种电影的缘故,那种躁动的感觉又把我侵犯了,看的时候有种莫名的蛋疼的感觉,有种让人恐惧的东西。看这部片子不能用太多智商,意会即可。

————————————— 华丽分割线 ——————————————

静下心来仔细想想,这部电影也不是没有可以琢磨的地方。

        第一,数字“九”是电影中的一个最重要的数字,首先是主要人物一共九个人,其次,故事发生在九十年代,九月份,再次,片尾曲——《我期待》是张雨生的歌,他于97年11月在车祸中去世。

        第二,故事与棒球联系紧密,从一开始在棒球赛中扔鞋被处分,中间的签名棒球,后面的拿球棒发愤,最后的投球,整部故事由棒球做线索,联系了所有的人和事。